Как использовать entityManager внутри объекта?


У меня есть эта функция в классе сущностей, но getDoctrine не нравится...

public function getObject()
{
    $em = $this->getDoctrine()->getEntityManager();

    switch($this->objectType)
    {
        case 'video':
            return $em->getRepository('fdj2012AdminBundle:Video')->find($this->objectId);
            break;
        case 'default':
            return false;
            break;
    }
}

Как использовать entityManager внутри моей сущности ?

2 4

2 ответа:

На самом деле сущность не должна знать о них. Я использую прослушиватели событий, если мне нужна предварительная логика в моей сущности. Когда вы регистрируете слушателей как сервисы, вы можете передать туда args, например EM или контейнер,и поместить их в класс слушателей.

Symfony Doc

Но я знаю не очень хороший способ получить их внутри класса сущностей. Принимая глобальную переменную ядра в методах сущностей.

global $kernel;
if ( 'AppCache' == get_class($kernel) )
{
   $kernel = $kernel->getKernel();
}
$em = $kernel->getContainer()->get( 'doctrine.orm.entity_manager' );

Позор мне : (

В службах.yml добавьте это

access_manager:
  class: AppBundle\Services\EntityManager
  arguments: [ @service_container ]

В Менеджере -

private $_container;


public function __construct(ContainerInterface $container)
{
    $this->_container = $container;
}

Для доступа к менеджеру -

        $entity2Manager = $this->_container->get('entity2_manager');