Symfony Autowiring注入失败:CompanyController依赖注入报错修复求助
错误信息
HTTP 500 Internal Server Error Controller
"App\Controller\CompanyController::edit" requires the "$company"
argument that could not be resolved. Cannot autowire argument
$company of "App\Controller\CompanyController:edit()": it needs an
instance of "App\Entity\Company" but this type has been excluded in
"config/services.yaml.
控制器代码
class CompanyController extends AbstractController { // .... #[Route('/company/edit/{slug}', name: 'company_edit', methods: ['GET', 'POST'])] public function edit(Company $company, Request $request, EntityManagerInterface $em): Response { $user = $this->getUser(); $this->denyAccessUnlessGranted('IS_AUTHENTICATED_REMEMBERED'); // dd($company); $form = $this->createForm(CompanyType::class, $company); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { // dd($company); foreach ($company->getCustomers() as $customer) { $customer->setIsActive(true); } $company->setIsActive(true); $em->persist($company->setUser($user)); $em->flush(); $this->addFlash('info', 'Société modifié avec succès'); return $this->redirectToRoute('company'); } return $this->render('company/edit.html.twig', [ 'company' => $company, 'form' => $form, ]); } // .... }
修复步骤
修正
config/services.yaml的实体排除规则
错误提示明确指出App\Entity\Company被排除在自动注入逻辑外。打开services.yaml,找到实体相关配置段,确保Company所在路径未被错误排除:App\Entity\: resource: '../src/Entity/' exclude: ['../src/Entity/{Repository,Traits}']若存在单独针对
App\Entity\Company的排除项,直接将其移除。确保路由参数与实体字段匹配
当前路由使用{slug}作为匹配参数,需要实体类中存在getSlug()方法,且数据库中存在对应slug的Company记录。如果实体无slug字段或字段名不匹配,可修改路由参数为实体主键(如{id}),或显式指定参数映射:// 需先引入命名空间:use Symfony\Bridge\Doctrine\Attribute\MapEntity; #[Route('/company/edit/{slug}', name: 'company_edit', methods: ['GET', 'POST'])] public function edit(#[MapEntity(mapping: ['slug' => 'slug'])] Company $company, Request $request, EntityManagerInterface $em): Response验证Doctrine实体配置
确认App\Entity\Company已正确添加#[Entity]注解,对应的Repository类存在且配置无误,保证Doctrine能正常识别并查询该实体。
内容的提问来源于stack exchange,提问作者brice brice

