我有一个内核事件监听器设置(kernel.controller)来重定向用户,如果他没有登录.事件监听器成功被调用,但是我很难搞清楚如何重定向.这是我得到的:
$cont = $event->getController('testpost');
$event->setResponse($cont);
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
Fatal error: Call to undefined method Symfony\Component\HttpKernel\Event\FilterControllerEvent::setResponse()
Run Code Online (Sandbox Code Playgroud) 如何在页面加载甚至监听器中获取路由?
我在services.yml中有以下代码:
page_load_listener:
class: Acme\MainBundle\EventListener\PageLoadListener
arguments: [@security.context, @session]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController, priority: 64 }
Run Code Online (Sandbox Code Playgroud)
在PageLoadListener类中,我有相应的方法:
public function onKernelController(FilterControllerEvent $event)
{
// Some code I need to execute that needs the route arguments
}
Run Code Online (Sandbox Code Playgroud)
问题似乎是路由和参数不可用.我错过了什么?
我需要通过哪个事件来获取路线及其参数?
谢谢,
JB
如何在事件侦听器中触发重定向到特定路由器?
有很多例子,但我找不到一个"GetResponseForExceptionEvent".例如,当我@roter作为参数传递时$this->router....似乎没有这样做.
我检查了这些但我可能错过了一些东西:
service.yml
services:
kernel.listener.kernel_request:
class: Booking\AdminBundle\EventListener\ErrorRedirect
tags:
- { name: kernel.event_listener, event: kernel.exception, method: onKernelException }
Run Code Online (Sandbox Code Playgroud)
事件监听器:
namespace Booking\AdminBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
class ErrorRedirect
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
$exception = $event->getException();
if ($exception instanceof NotFoundHttpException) {
// redirect to '/' router or '/error'
//$event->setResponse(...........);
}
}
}
Run Code Online (Sandbox Code Playgroud)