【发布时间】:2017-12-13 12:39:11
【问题描述】:
我目前正在尝试实现一个需要在每个操作之前执行的控制器侦听器:
class AuthenticationListener
{
/**
* @var TokenStorage
*/
private $tokenStorage;
/**
* @var $controller
*
* Controller that is accessed
*/
private $controller;
/**
* @var string $class full class path of controller
*/
private $class;
public function __construct(TokenStorage $tokenStorage)
{
$this->tokenStorage = $tokenStorage;
}
public function onKernelController(FilterControllerEvent $event)
{
// Get controller after redirect here?
$this->controller = $event->getController()[0];
$this->class = get_class($this->controller);
}
}
但是,当发生重定向时,此侦听器将接收 RedirectController 而不是用户所针对的控制器。无论如何要获得重定向后的控制器名称吗?
【问题讨论】:
-
您可以使用 FilterControllerArgumentsEvent 来获取被重定向到的路由的名称。但是拿到实际的控制器会有点挑战。
-
这是不可取的,因为它会在 routing.yml 中的路由和侦听器之间创建隐式耦合。更改 url 中的路径需要在两个地方更改它
-
好的,你为什么要尝试获取重定向控制器?毕竟,最终会发生重定向,然后您将获得控制器。
标签: symfony