Переадресация Symfony2 для прослушивателя событий?

У меня есть настройка прослушивателя событий ядра (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 по умолчанию, чтобы покрыть это для вас …