我对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
类的子实体。
修改
以下是我的User
课程(位于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
?我知道这肯定是一个非常愚蠢的错误,但我无法看到它......
答案 0 :(得分:2)
您可以使用UserBundle.php而非CompanyUserBundle.php签入您的UserBundle的Bundle类文件。
尝试使用
$em->getRepository('UserBundle:User')
而不是
$em->getRepository('CompanyUserBundle:User')
在这种情况下,我认为它的名称空间/ BundleClassName可能只是UserBundle而不是CompanyUserBundle。
感谢。