Symfony2控制器交换无法正常工作

时间:2012-03-12 11:32:27

标签: php symfony

我需要检查项目中几条路线上的用户会话。所以我使用了一个控制器监听器,如果控制器是给定接口的实例,则查找每个请求。如果确实如此,我将检查会话,如果无效,则应将用户重定向到另一个会话将被修复的控制器。我使用这种方法描述了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

我认为我的被叫控制器试图访问服务,但是控制器的这个实例无法访问容器元素,因为它是空的。不幸的是我不知道如何解决这个问题。有谁知道我该如何做到这一点?

祝你好运 菲利克斯

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。我意识到这是因为你是Controller的子类,它是一个ContainerAware。您需要为其提供“service_container”服务。

最好的选择可能是将控制器定义为服务http://symfony.com/doc/current/cookbook/controller/service.html,然后将其注入到您拥有事件处理程序的类中。这就是我要为我的代码尝试的路由,所以我没有测试它,但它应该工作。以为我会把它放在那里帮助你。