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

0

Я хотел бы сделать запрос к базе данных от абонента

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

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

Но как я могу сделать это от поджигателя.

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

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
    Похоже, ваш класс не расширяет Subscriber и поэтому getEntityManager не определен. Может я что то не так читаю?
  • 0
    @DaOgre мой класс реализует EventSubsriberInterface. Это то, что вы имели в виду?
Теги:
doctrine
repository

1 ответ

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 перед его передачей. Посмотрите на этот ответ
Показать ещё 13 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню