Переадресация symfony2 в конструкторе

Я хочу сделать перенаправление в конструкторе в конкретном порядке. Я пытался сделать это так:

return new \Symfony\Component\HttpFoundation\RedirectResponse($url); 

а вот так:

 return $this->redirect($url); 

Но это не сработает. В любом другом методе он работает, но по какой-то причине, когда этот код находится в конструкторе, он не работает. Нет ошибок или предупреждений.

Если вам нужна дополнительная информация в комментариях. Спасибо за время.

Плохая идея использовать перенаправление в конструкторах. Конструктор возвращает только текущий object of the class (объект контроллера в вашем случае), и он не может вернуть redirect object . Возможно, вы можете решить свою задачу на маршруте, используя FrameworkBundle:Redirect:urlRedirect :

 # redirecting the root root: path: / defaults: _controller: FrameworkBundle:Redirect:urlRedirect path: /app permanent: true по # redirecting the root root: path: / defaults: _controller: FrameworkBundle:Redirect:urlRedirect path: /app permanent: true 

Проверьте примеры в настройке перенаправления без пользовательского контроллера

Плохая идея перенаправить с контроллера напрямую. Я предпочел бы бросить какое-то особое исключение.

 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); } } } 

Этот способ может поддерживать единую логику обработки ошибок и перенаправления. Слишком сложно?