从事件监听器重定向到Url


Symfony2 Redirect to Url from Event Listener

当symfony抛出异常时,我需要从EventListener重定向到自定义url

in my service.yml

app.exception_listener:
    class: AppBundle'EventListener'ExceptionListener
    tags:
        - { name: kernel.event_listener, event: kernel.exception, method: onKernelException  }

在我的PHP类

<?php
namespace AppBundle'EventListener;
use Symfony'Component'HttpKernel'Event'GetResponseForExceptionEvent;
use Symfony'Component'HttpFoundation'Response;
use Symfony'Component'HttpKernel'Exception'HttpExceptionInterface;
use Symfony'Component'DependencyInjection'Container;
use Symfony'Component'HttpFoundation'RedirectResponse;
class ExceptionListener {
public function onKernelException(GetResponseForExceptionEvent $event) {
    // You get the exception object from the received event
    $exception = $event->getException();
    if ($exception instanceof NotFoundHttpException) {
        //i need this function
        return $this->redirect('https://www.google.co.ve/?gws_rd=ssl', 404);
    }
}
}

而不是:

返回$ this ->重定向(https://www.google.co.ve/?gws_rd=ssl, 404年),

:

事件-> setResponse(新RedirectResponse (' https://www.google.co.ve/?gws_rd=ssl '));

还要注意,发送带有404响应的Location头是没有意义的,您应该使用3xx范围内的响应。当试图用另一个状态码重定向时,Symfony实际上会(正确地)抛出异常。