在我的 Symfony2 应用程序中,我将大部分实体提取到一个单独的库中,我使用 composer 安装该库。
这个库不依赖于 Symfony2(但确实依赖于 Doctrine,因为我使用注释),因为我也想在其他非 Symfony2 项目中使用它。
该库包含一个 ClientUser
实体,它映射到一个 client_users
表。在我的 Symfony2 应用程序中,我想使用相同的 ClientUser
实体进行身份验证。这需要我实现 Symfony\Component\Security\Core\User\UserInterface
。
问题是我想要一个“Symfony2-agnostic”和一个ClientUser
实体的“Symfony-aware”实现(两者都应该映射到同一张 table )。我尝试从 ClientUserAbstract 实体扩展这两个类,但没有成功。
<?php
namespace My\Library\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\MappedSuperClass
*/
class ClientUserAbstract {
// all my fields here
}
我的“Symfony2-agnostic”实体:
<?php
namespace My\Library\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*/
class ClientUser extends ClientUserAbstract {
// nothing here, it's empty
}
我的“Symfony2-aware”实体:
<?php
namespace Vendor\Bundle\MyBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
/**
* @ORM\Entity
*/
class ClientUser extends ClientUserAbstract implements UserInterface {
// all methods that Symfony requires because of the UserInterface here:
public function getRoles();
public function getPassword();
public function getSalt();
public function getUsername();
public function eraseCredentials();
}
我的 Symfony 2 应用程序现在检测到两个实体,它们指向同一个表并因异常而失败。我要么需要告诉我的 Symfony2 应用程序“忽略”我的 My\Library\Entity\ClientUser
,要么我需要一种方法来扩展它。有什么想法吗?
最佳答案
以防万一其他人有这个问题,这里是我的评论转换为答案:
对于给定的实体管理器,它严格来说是每个表一个实体。您需要创建第二个实体管理器并将其用于身份验证。
当然,我喜欢获得代表。
关于php - Symfony 2/Doctrine 2 : Two Entities for the same table, 用一个代替另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23955978/