2014-11-19 4 views
0

Я хотел бы сделать запрос к базе данных от абонентакак получить доступ ко хранилищу от слушателя

Из хранилища: это легко я использую следующий (для пользователя Exemple объекта, где я хочу извлечения пользователя с ID = 1

$repository = $this->getDoctrine()->getManager->getRepository('NameBundle:User'); 
$user = $repository->find(1); 

Но как я могу сделать это с suscriber

Вот что я пытался ... (без успеха, как я получил следующее от Symfony2:.. «FatalErrorException: Ошибка: вызов неопределенного метода Sdz \ BlogBundle \ Form \ EventListener \ Subscriber :: getEn tityManager()»

namespace Sdz\BlogBundle\Form\EventListener; 
use Symfony\Component\EventDispatcher\EventSubscriberInterface; 
use Doctrine\ORM\EntityRepository; 

class TraductionSubscriber implements EventSubscriberInterface 
{ 
    public static function getSubscribedEvents() 
    { 
    return array(FormEvents::PRE_SET_DATA => 'preSetData'); 
    } 


    public function preSetData(FormEvent $event) 
    { 
    $form = $event->getForm();  
    $datas = $event->getData(); 

    $userexist == 'no' 

    foreach ($datas as $data){ 
     if ($data->getUser()->getId() == 1)  { $userexist = 'yes'; $user= $data->getUser(); } 
    } 

    if ($userexist == 'no') { 
     $repository = $this->getEntityManager()->getRepository('SdzBlogBundle:User'); 
     $user = $repository->find(1); 
    } 

    $form 
    ->add('notes', 'collection', array(
        'type' => new NoteType, 
        'label' => $user->getName(), 
        'required' => false, 
        )); 
    } 
} 
+0

Похоже, ваш класс не распространяющие подписчика и поэтому getEntityManager не определен. Может быть, я что-то неправильно понял? – DaOgre

+0

@DaOgre мой класс реализует EventSubsriberInterface. Это то, что вы имели в виду? –

ответ

0

Просто передать его в конструктор (если это не сервис):

class TraductionSubscriber implements EventSubscriberInterface 
{ 
    private $em; 

    public function __construct(EntityManagerInterface $em) 
    { 
     $this->em = $em; 
    } 

    ... 

и использование:

new TraductionSubscriber($em); 
+0

При добавлении функции построения в мой класс появилось следующее сообщение: «Catchable Fatal Error: аргумент 1, переданный в Sdz \ BlogBundle \ Form \ EventListener \ TraductionSubscriber :: __ construct() должен быть экземпляром Sdz \ BlogBundle \ Form \ EventListener \ EntityManagerInterface, не указано, « –

+0

@Aleqxs вам нужно получить экземпляр EM перед его передачей. Взгляните на [этот ответ] (http://stackoverflow.com/questions/26976226/symfony2-how-call-the-repository-of-anity-in-the-formtype/26976628#26976628) – xurshid29

+0

@Aleqxs Ах, я забыл спросить, где вы это называете? в контроллере или в формеType? – xurshid29

Смежные вопросы