symfony2: как перенаправить из пользовательского прослушивателя событий

Я создал пользовательский прослушиватель событий, слушая пользовательское событие в symfony2.

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

Как бы мы могли это сделать? Должен ли я что-то добавить в свое мероприятие, чтобы оно могло изменить ответ? Есть ли способ просто выполнить перенаправление прямо в слушателе?

Спасибо !

0

Решение

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

Что касается того, как перенаправить из прослушивателя событий, я слышал, что это плохая практика.

Итак, для EventListener:

В моем контроллере:

            $event = new PortfolioChangeEvent();
$this->get('event_dispatcher')->dispatch(FoodMeUpEvents::PORFOLIO_CHANGE, $event);
if ($event->getRedirect()) return $this->redirectToRoute('cms', array('dir' => 'general', 'page' => 'foodmeup_premium'));

и в моем EventListener:

public function onPortfolioUserChange(PortfolioChangeEvent $event)
{
$event->setRedirect(true);
}

и мое событие:

<?php

namespace AppBundle\Event;

use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\EventDispatcher\Event;

class PortfolioChangeEvent extends Event
{
/**
* @Assert\Type(type="bool")
*/
private $redirect = false;

public function getRedirect()
{
return $this->redirect;
}

public function setRedirect($redirect)
{
$this->redirect = $redirect;

return $this;
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector