У меня есть настройка прослушивателя событий ядра (kernel.controller), чтобы перенаправить пользователя, если он не вошел в систему. Слушатель событий успешно вызван, однако им не удалось выяснить, как перенаправить. Вот что я получил:
$cont = $event->getController('testpost'); $event->setResponse($cont);
Который дает мне ошибку:
Fatal error: Call to undefined method Symfony\Component\HttpKernel\Event\FilterControllerEvent::setResponse()
Вы не можете установить ответ на объект FilterControllerEvent
. Вам необходимо прослушать событие kernel.request
потому что его объект GetResponseEvent
имеет метод setResponse()
:
$route = 'route_name'; if ($route === $event->getRequest()->get('_route')) { return; } $url = $this->router->generate($route); $response = new RedirectResponse($url); $event->setResponse($response);
Если вы хотите переадресовать из FilterControllerEvent
вы должны использовать это:
public function onKernelController(FilterControllerEvent $event) { // do something $event->setController(function() use ($redirectUrl) { return new RedirectResponse($redirectUrl); }); }
Больше руды менее ясный способ перенаправления на событие «kernel.controller»
public function onKernelController(FilterControllerEvent $event) { /* @var $controller \Symfony\Bundle\FrameworkBundle\Controller\Controller */ $controller = $event->getController()[0]; // PHP 5.4 or $controller = $controller[0]; throw new HttpException(307, null, null, array('Location' => $controller->generateUrl('homepage'))); }
Вот аналогичный вопрос о том, как делать (почти) одно и то же. Это должно дать вам ключ.
Symfony 2 – перенаправление, если пользователь вошел в систему
Надеюсь, поможет.
Это не путь, мой друг. Вы должны использовать Symfony Security по умолчанию, чтобы покрыть это для вас …