使用 '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。
谢谢。
我对 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。
谢谢。