2012-03-12 145 views
1

私のプロジェクトのいくつかのルートでユーザセッションをチェックする必要があります。そこでコントローラリスナを使用し、コントローラが特定のインタフェースのインスタンスである場合は、各要求を調べました。それが本当であれば、私はセッションをチェックし、有効でない場合、セッションが修復される別のコントローラにユーザをリダイレクトする必要があります。私はこの方法がhereSymfony2コントローラのスワップが機能しない

を説明し、この方法を使用これは、コードは、私が使用します。

Fatal error: Call to a member function get() on a non-object in C:\Users\Yoghurt\Websites\Mobile\vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Controller\Controller.php on line 189

は私と呼ばれるコントローラをしようと思う:

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')); 
      } 
     } 
    } 
} 

問題は、私は次のエラーを取得するということですサービスにアクセスしますが、コントローラのこのインスタンスは空であるためコンテナ要素にアクセスできません。残念ながら、私はそれを修正する方法を知らない。誰かが私がその仕事をどうやって作ることができるかを知っていますか?

敬具 フェリックス

答えて

3

私は同じ問題を抱えていました。私はそれがControllerをサブクラス化していることを認識しました。これは-ContainerAwareです。あなたはそれに 'service_container'サービスを与える必要があります。

最良のオプションは、それは私が私のコードのために試みることについてだルートです。サービスhttp://symfony.com/doc/current/cookbook/controller/service.htmlとしてコントローラーを定義し、あなたはイベントハンドラを持っているクラスにそれを注入するだろうので、私はそうではありませんそれをテストしましたが、うまくいくはずです。私はあなたを助けるためにそこにそれを置くと思った。

関連する問題