You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决Symfony 5.3.10中删除分类时的Autowire自动装配报错问题

Cannot autowire argument $category of "App\Controller\AdminController::deleteCategory()": it references class "App\Entity\Category" but no such service exists.

这个报错的核心原因是Symfony默认不会自动把路由参数{id}转换为对应的Category实体对象,你用实体类型直接接收路由参数的写法依赖Doctrine的参数转换器功能,该功能未正确启用或配置时就会抛出上述错误。

解决方法1:手动查询实体(无需额外依赖,推荐新手使用)

直接修改控制器的deleteCategory方法,接收整型id参数,手动查询对应分类实体:

<?php
// AdminController.php 里的方法修改为如下
#[Route('/delete-category/{id}', name: 'delete_category')]
public function deleteCategory(int $id): Response
{
    $category = $this->getDoctrine()->getRepository(Category::class)->find($id);
    // 处理分类不存在的异常情况
    if (!$category) {
        throw $this->createNotFoundException('请求的分类不存在');
    }

    $entityManager = $this->getDoctrine()->getManager();
    $entityManager->remove($category);
    $entityManager->flush();
    return $this->redirectToRoute('categories');
}

解决方法2:启用Doctrine参数转换器,保留实体直接注入的写法

  1. 首先确认你已安装参数转换器依赖包,未安装的话执行命令:
    composer require sensio/framework-extra-bundle
  2. 在控制器方法上添加Entity注解明确参数转换规则,修改后的代码如下:
<?php
namespace App\Controller;

// 新增引入注解类
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use App\Entity\Category;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

#[Route('/admin')]
class AdminController extends AbstractController
{
    #[Route('/delete-category/{id}', name: 'delete_category')]
    // 新增下面这行注解,指定用id查询Category实体
    #[Entity('category', expr: 'repository.find(id)')]
    public function deleteCategory(Category $category): Response
    {
        $entityManager = $this->getDoctrine()->getManager();
        $entityManager->remove($category);
        $entityManager->flush();
        return $this->redirectToRoute('categories');
    }
}
  1. 额外检查你的App\Entity\Category类是否已添加正确的Doctrine实体注解,类上方必须有#[ORM\Entity]标记,才能被参数转换器识别。

你现有的CategoryTreeAdminList代码中生成删除链接的逻辑是正确的,不需要修改。

内容的提问来源于stack exchange,提问作者Saddam Hawari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:15:04