使用 'CompanyNameBundle:User' 时出错 'Unknown Entity namespace alias'

Error 'Unknown Entity namespace alias' when using 'CompanyNameBundle:User'

我对 Symfony2 有一个奇怪的问题。我正在处理一个包含 40-50 个实体的项目,但对于其中一个实体,这段代码不起作用:

$user = $em->getRepository('CompanyUserBundle:User')
    ->findOneBy([
        'username' => $person->getUsername()
    ]);

我收到错误 Unknown Entity namespace alias 'CompanyUserBundle'.。奇怪的是,如果我将代码更改为:

$user = $em->getRepository('Company\UserBundle\Entity\User')
    ->findOneBy([
        'username' => $person->getUsername()
    ]);

它完美地工作...那么,这里有什么问题吗?我在代码周围使用 getRepository('Alias:Entity') 结构,没有任何其他问题...

我不知道它是否重要,但 User 是 FOSUserBundle BaseUser class.

的子实体

编辑

这是我的 User class(它位于 src/Company/UserBundle/Entity):

namespace Company\UserBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

/**
 * User
 *
 * @ORM\Table(name="fos_user")
 * @ORM\Entity
 */
class User extends BaseUser
{
    /**
     *
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    public function __construct()
    {
        parent::__construct();
        // your own logic
    }

   /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

}

这是我的一部分 AppKernel.php:

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            /* ... other, non interesting, bundles... */
            new Company\UserBundle\UserBundle(),
            new FOS\UserBundle\FOSUserBundle(),
            new FR3D\LdapBundle\FR3DLdapBundle(),
            new JMS\AopBundle\JMSAopBundle(),
            new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
            new JMS\DiExtraBundle\JMSDiExtraBundle($this),
        );
    }
}

更多信息:正如@herr 在评论中所说,使用

$user = $em->getRepository('UserBundle:User')
    ->findOneBy([
        'username' => $person->getUsername()
    ]);

工作正常...但我不明白为什么。为什么在此包中命名空间别名是 UserBundle 而不是 CompanyUserBundle?我知道这一定是一个非常愚蠢的错误,但我看不到它...

您可以签入您的 UserBundle 的 Bundle class 文件,它将使用 UserBundle.php 而不是 CompanyUserBundle.php。

只需尝试使用

$em->getRepository('UserBundle:User')

改为

$em->getRepository('CompanyUserBundle:User')

我认为在这种情况下,命名空间/BundleClassName 可能只是 UserBundle 而不是 CompanyUserBundle。

谢谢。