плохая идея перенаправить от контроллера непосредственно. Я предпочел бы бросить какое-то особое исключение.
class FooController{
public function __construct(){
if (some_test){
throw RedirectionException(); // name it however you like
}
}
}
Затем в Symfony
, настроить ExceptionListener
, который будет оценивать класс-тип Exception
брошенной и перенаправить вас приложение на другой URL, если это необходимо. Эта услуга, скорее всего, будет зависеть от службы @routing
для генерации альтернативного адресата URL.
Служба конфигурация:
services:
kernel.listener.your_listener_name:
class: Your\Namespace\AcmeExceptionListener
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
Слушатель класс:
class AcmeExceptionListener
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
// You get the exception object from the received event
$exception = $event->getException();
if ($exception instanceof RedirectionException){
$response = new RedirectResponse();
$event->setResponse($response);
}
}
}
Этот способ может поддерживать единую обработку ошибок и перенаправление логику. Слишком сложно?
В конструкторе чего? –
Плохая идея использовать перенаправление в конструкторах –
@Markus Kottländer: В конструкторе моего контроллера. Виктор: Почему это плохая идея? – gprusiiski