构造函数中的symfony2重定向

I want to do a redirect in the constructor in a specific sutiation. I tried to do it like this:

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

and like this:

return $this->redirect($url);

But it doesn't work. In every other method it works, but for some reason when this code is in the constructor it doesn't work. There are no errors or warnings.

If you need more info ask in the comments. Thanks for the time.

Bad idea to use redirect in constructors. Constructor return only current object of the class (object of controller in your case), and it can't return redirect object. Maybe you can solve your task in route, using FrameworkBundle:Redirect:urlRedirect:

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

Check examples in How to Configure a Redirect without a Custom Controller

Bad idea to redirect from controller directly. I would rather throw some custom exception.

class FooController{
    public function __construct(){
        if ( some_test ){
            throw RedirectionException(); // name it however you like
        }
    }
}

Then, in Symfony, setup the ExceptionListener which will evaluate class-type of Exception thrown and redirect you application to another URL, if necessary. This service will most likely depend on @routing service to generate alternate URL destination.

Service config:

services:
    kernel.listener.your_listener_name:
        class: Your\Namespace\AcmeExceptionListener
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException }

Listener class:

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

This way to can maintain single error handling and redirection logic. Too complicated?