【问题标题】:Symfony 2.8 - Controller listener, get controller after redirectSymfony 2.8 - 控制器监听器,重定向后获取控制器
【发布时间】: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


【解决方案1】:

当然可以,通常你可以打电话给Request::getParameter('_controller'),你应该得到原来的控制器。

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 2018-11-28
    • 2015-02-14
    • 2012-09-13
    • 2018-04-12
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多