В моем приложении Symfony2 я извлек большую часть своих Entities в отдельную библиотеку, которую я устанавливаю с помощью композитора.
Эта библиотека не имеет зависимости от Symfony2 (но зависит от Doctrine, потому что я использую аннотации), потому что я хотел бы использовать ее и в других проектах, отличных от Symfony2.
Библиотека содержит объект ClientUser
Entity, который сопоставляется с таблицей client_users
. В моем приложении Symfony2 я хотел бы использовать тот же ClientUser
Entity для аутентификации. Это требует от меня реализации Symfony\Component\Security\Core\User\UserInterface
.
Проблема в том, что я хотел бы иметь как «Symfony2-agnostic», так и «Symfony-aware» реализацию объекта ClientUser
Entity (который должен отображаться в одной таблице). Я попытался расширить оба класса из объекта ClientUserAbstract Entity, но это не сработало.
<?php namespace My\Library\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\MappedSuperClass */ class ClientUserAbstract { // all my fields here }
Мой «Symfony2-агностик» Сущность:
<?php namespace My\Library\Entity; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity */ class ClientUser extends ClientUserAbstract { // nothing here, it's empty }
Мой «Symfony2-aware» Entity:
<?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(); }
Приложение My Symfony 2 теперь обнаруживает два объекта, которые указывают на одну и ту же таблицу и не работают с Исключением. Я либо должен сказать моему приложению Symfony2 «игнорировать» мой My\Library\Entity\ClientUser
, либо мне нужен способ его расширения. Есть идеи?
На всякий случай, если у кого-то еще есть эта проблема, вот мой комментарий, преобразованный в ответ:
Для данного менеджера сущностей это строго одно сущность для каждой таблицы. Вам нужно создать второй диспетчер объектов и использовать его для аутентификации.
Плюс, конечно, мне нравится получать повторений.