Как использовать 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 ответа:
На самом деле сущность не должна знать о них. Я использую прослушиватели событий, если мне нужна предварительная логика в моей сущности. Когда вы регистрируете слушателей как сервисы, вы можете передать туда args, например EM или контейнер,и поместить их в класс слушателей.
Но я знаю не очень хороший способ получить их внутри класса сущностей. Принимая глобальную переменную ядра в методах сущностей.
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');