我目前正在与Symfony2和Doctrine2合作建立一个拥有我自己的几个捆绑的网站。我遇到问题的是CoreBundle和UserBundle。
我想让一个日志管理器在DB中存储多个动作。因此,我在Log
中使用我需要的属性创建了一个抽象实体CoreBundle
,并使用doctrine进行映射。没问题。
现在,我想在UserBundle
中为我想要存储的每种Log
扩展此类。我这样做了,将@InheritanceType
添加到Log
类以及@DiscriminatorColumn and @DiscrimiatorMap
。实体在另一个包中,我在地图中完全命名它们。
问题在于,当我尝试它时,Doctrine会抛出异常:
Entity class 'EP\UserBunble\Entity\Log\LoginUserLog' used in the discriminator map of class 'EP\CoreBundle\Entity\Log\Log' does not exist.
我不明白,因为我已经两次这样做了。唯一的区别是在同一个文件夹/命名空间中的所有实体。
你有什么想法吗? 感谢
以下是源文件:
1 - 记录
namespace EP\CoreBundle\Entity\Log;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* Log
* @ORM\Table(name="ep_logs")
* @ORM\Entity()
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="discriminator", type="string")
* @ORM\DiscriminatorMap({"user_registration"="EP\UserBundle\Entity\Log\RegistrationUserLog", "user_login"="EP\UserBunble\Entity\Log\LoginUserLog"})
*/
abstract class Log{
/**
* @var integer
* @ORM\Column(name="id", type="bigint", options={"unsigned"=true})
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
* @ORM\Column(name="domain", type="string", length=255)
*/
protected $domain;
/**
* @var array
* @ORM\Column(name="details", type="array")
*/
protected $details;
}
2 - BaseUserLog:
namespace EP\UserBundle\Entity\Log;
use EP\DBAL\Types\EnumLogDomainType as LogDomain;
use EP\CoreBundle\Entity\Log\Log;
use EP\UserBundle\Entity\User;
/**
* BaseUserLog
*/
abstract class BaseUserLog extends Log{
const DEFAULT_DOMAIN = LogDomain::DOMAIN_USERS;
/**
* @var User
*/
protected $user;
}
3 - LoginUserLog
namespace EP\UserBundle\Entity\Log;
use Doctrine\ORM\Mapping as ORM;
use EP\DBAL\Types\EnumLogActionType as LogAction;
use EP\UserBundle\Entity\Log\BaseUserLog;
/**
* LoginUserLog
* @ORM\Entity()
*/
class LoginUserLog extends BaseUserLog{
const DEFAULT_ACTION = LogAction::ACTION_USER_LOGIN;
}