我需要检查项目中几条路线上的用户会话。所以我使用了一个控制器监听器,如果控制器是给定接口的实例,则查找每个请求。如果确实如此,我将检查会话,如果无效,则应将用户重定向到另一个会话将被修复的控制器。我使用这种方法描述了here
的方法这是我使用的代码:
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType())
{
if (!is_array($controller))
return;
$controllerObject = $controller[0];
if ($controllerObject instanceof PreControllerInterface)
{
$result = $controllerObject->initialize($event->getRequest());
if($result != null)
{
$ctrl = new PublicFrontendController();
$event->setController(array($ctrl, 'identifyAction'));
}
}
}
}
问题是我收到以下错误:
致命错误:在C:\ Users \ Yoghurt \ Websites \ Mobile \ vendor \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller.php中的非对象上调用成员函数get() 189
我认为我的被叫控制器试图访问服务,但是控制器的这个实例无法访问容器元素,因为它是空的。不幸的是我不知道如何解决这个问题。有谁知道我该如何做到这一点?
祝你好运 菲利克斯
答案 0 :(得分:3)
我遇到了同样的问题。我意识到这是因为你是Controller
的子类,它是一个ContainerAware
。您需要为其提供“service_container”服务。
最好的选择可能是将控制器定义为服务http://symfony.com/doc/current/cookbook/controller/service.html,然后将其注入到您拥有事件处理程序的类中。这就是我要为我的代码尝试的路由,所以我没有测试它,但它应该工作。以为我会把它放在那里帮助你。