Примечание: неопределенная переменная: eventDispatcher? - PullRequest
0 голосов
/ 09 октября 2018

Эй, братья, я в этой проблеме. Я пытаюсь создать событие, чтобы отправить электронное письмо любому новому пользователю, зарегистрировавшемуся, но я не знаю, что не так

enter image description hereenter image description here

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

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

Вместо этого вы, вероятно, захотите воспользоваться услугой event_dispatcher.В современных приложениях Symfony все, что вам нужно сделать, это добавить дополнительный аргумент к действию вашего контроллера, на который указывается тип EventDispatcherInterface (точно так же, как вы уже делаете это с кодировщиком паролей):

use Symfony\Component\EventDispatcher\EventDispatcherInterface;

public function registerAction(Request $request, UserPasswordEncoderInterface $passwordEncoder, EventDispatcherInterface $eventDispatcher)
{
    // ...
}
0 голосов
/ 09 октября 2018

Вы должны создать объект EventDispatcher перед его использованием:

use Symfony\Component\EventDispatcher\EventDispatcherInterface;
....
public function registerAction(..., EventDispatcherInterface $eventDispatcher)
{

    $event = new GenericEvent($user);
    $eventDispatcher->dispatch(Events::USER_REGISTERED, $event);
}

РЕДАКТИРОВАТЬ : xabbuh прав.Мой блок кода предполагал, что вы добавили своих слушателей регистрации в диспетчер.Действительно, это предотвращает разделение, которое пытается обеспечить компонент EventDispatcher.Кроме того, не следует создавать объекты в контроллере, используя, по возможности, new, используя вместо этого внедрение зависимостей и / или шаблон фабрики.

В вашем случае вы должны внедрить службу EventDispatcher (через EventDispatcherInterface) в ваш контроллер, используя автоматическую разводку, используя подсказку типа, как описано выше.

...