Symfony 错误:在链配置的命名空间 App\Entity 中找不到类 xxx [重复]

Posted

技术标签:

【中文标题】Symfony 错误:在链配置的命名空间 App\\Entity 中找不到类 xxx [重复]【英文标题】:Symfony error: The class xxx was not found in the chain configured namespaces App\Entity [duplicate]Symfony 错误:在链配置的命名空间 App\Entity 中找不到类 xxx [重复] 【发布时间】:2021-12-16 23:47:48 【问题描述】:

我用实体Company 和控制器CompanyController 创建了一个新的symfony 项目。我想从数据库中获取结果,但我不断收到此错误:The class 'App\Repository\CompanyRepository' was not found in the chain configured namespaces App\Entity,我不知道为什么。

我搜索了互联网,但我只阅读了在命名空间不是 App\Entity 时解决错误的答案。请帮帮我。

在创建新的 symfony 项目时,这些文件都存储在 src 文件夹中。我没有更改任何配置文件,所以每个配置都是默认的。

这是我的实体:

<?php

namespace App\Entity;

use App\Repository\CompanyRepository;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass=CompanyRepository::class)
 */
class Company

之后只有 getter 和 setter。

这是我的控制器:

<?php

namespace App\Controller;

use App\Repository\CompanyRepository;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

#[Route('/api/company', name: 'company')]
class CompanyController extends AbstractController

    #[Route(name: 'company.get', methods: ["GET"])]
    public function getCompanies(): Response
    
        $entityManager = $this->getDoctrine()->getManager();
        $repository = $entityManager->getRepository(CompanyRepository::class);

        $companies = $repository->findAll();
        $data = [];

        foreach ($companies as $company) 
            $data[] = $company->toArray();
        

        return $this->json([
            'data' => $data
        ]);
    

这是我的公司资料库:

<?php

namespace App\Repository;

use App\Entity\Company;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;

/**
 * @method Company|null find($id, $lockMode = null, $lockVersion = null)
 * @method Company|null findOneBy(array $criteria, array $orderBy = null)
 * @method Company[]    findAll()
 * @method Company[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
 */
class CompanyRepository extends ServiceEntityRepository

    public function __construct(ManagerRegistry $registry)
    
        parent::__construct($registry, Company::class);
    

    // /**
    //  * @return Company[] Returns an array of Company objects
    //  */
    /*
    public function findByExampleField($value)
    
        return $this->createQueryBuilder('c')
            ->andWhere('c.exampleField = :val')
            ->setParameter('val', $value)
            ->orderBy('c.id', 'ASC')
            ->setMaxResults(10)
            ->getQuery()
            ->getResult()
        ;
    
    */

    /*
    public function findOneBySomeField($value): ?Company
    
        return $this->createQueryBuilder('c')
            ->andWhere('c.exampleField = :val')
            ->setParameter('val', $value)
            ->getQuery()
            ->getOneOrNullResult()
        ;
    
    */


【问题讨论】:

你能告诉我们你的实体吗?您的存储库配置可能有错误 在你的公司实体类中试试这个@ORM\Entity(repositoryClass="App\Repository\CompanyRepository") @OussMaL'aireBien 不幸的是,这不是很好。又是同样的错误。 您能给我们看看您的 CompanyRepository 文件吗? 请分享更多细节。这些文件存储在哪里?您是如何配置实体映射的? 【参考方案1】:

在控制器中,将$repository = $entityManager-&gt;getRepository(CompanyRepository::class); 替换为$repository = $entityManager-&gt;getRepository(Company::class);

并将use App\Repository\CompanyRepository; 替换为use App\Entity\Company;

因为 getRepository() 需要 Entity 类,而不是 Repository 类。

<?php

namespace App\Controller;

use App\Entity\Company;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

#[Route('/api/company', name: 'company')]
class CompanyController extends AbstractController

    #[Route(name: 'company.get', methods: ["GET"])]
    public function getCompanies(): Response
    
        $entityManager = $this->getDoctrine()->getManager();
        $repository = $entityManager->getRepository(Company::class);

        $companies = $repository->findAll();
        $data = [];

        foreach ($companies as $company) 
            $data[] = $company->toArray();
        

        return $this->json([
            'data' => $data
        ]);
    
 

【讨论】:

这是抛出 Class 'App\Controller\Company' does not exist 错误。 添加这个“使用App\Entity\Company;” 我更新了答案

以上是关于Symfony 错误:在链配置的命名空间 App\Entity 中找不到类 xxx [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 - 在链配置的命名空间中找不到类“X”

Zend Framework 2 + Doctrine ODM,“在链配置的命名空间中找不到类”错误?

Symfony 自定义配置 - 命名空间问题

另一个未知实体命名空间别名错误(Symfony2,手动创建的实体)

更改命名空间时在 Laravel 中找不到类“\App\User”

使用 RMQ 在 Symfony Messenger 中处理来自不同命名空间的消息