Symfony提示CompanyRepository不在App\Entity命名空间链该如何解决
问题原因
你的报错是调用Doctrine的EntityManager::getRepository()方法时传入了Repository类的命名空间导致的,该方法默认仅会在App\Entity命名空间下查找传入的类,你传入App\Repository\CompanyRepository自然匹配不到对应的映射配置。
解决方案
方案1:修改getRepository传入参数
将控制器中获取Repository的代码改为传入实体类即可:
首先在控制器顶部引入实体类:
use App\Entity\Company;
然后修改获取Repository的行:
// 把原来的CompanyRepository::class改成Company::class $repository = $entityManager->getRepository(Company::class);
方案2(推荐):直接依赖注入Repository
Symfony默认支持Repository的自动依赖注入,不需要手动通过EntityManager获取,你可以直接把Repository注入到控制器方法中,代码更简洁:
#[Route(name: 'company.get', methods: ["GET"])] public function getCompanies(CompanyRepository $repository): Response { // 删掉原来获取entityManager和repository的两行代码即可 $companies = $repository->findAll(); $data = []; foreach ($companies as $company) { $data[] = $company->toArray(); } return $this->json([ 'data' => $data ]); }
额外检查项
如果修改后仍然报错,可以按以下步骤排查:
- 确认
CompanyRepository.php文件存放路径为src/Repository/CompanyRepository.php,文件名大小写和类名完全一致 - 执行命令清理项目缓存:
php bin/console cache:clear
内容的提问来源于stack exchange,提问作者samuelhertrich
相关产品推荐
相关产品推荐

