2012-03-12 6 views
1

Мне нужно проверить сеанс моих пользователей на нескольких маршрутах в моем проекте. Поэтому я использовал прослушиватель контроллера и искал каждый запрос, если контроллер является экземпляром данного интерфейса. Если это правда, я проверю сеанс, и если он недействителен, пользователь должен быть перенаправлен на другой контроллер, где сеанс будет восстановлен. Я использовал этот метод, метод, описанный hereКонтроллер обмена Symfony2 не работает

Это код, я использую:

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

Проблема в том, что я получаю следующее сообщение об ошибке:

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

Я думаю, мой называется контроллер пытается доступ к службе, но этот экземпляр контроллера не может получить доступ к элементу контейнера, потому что он пуст. К сожалению, я не знаю, как это исправить. Кто-нибудь знает, как я могу это сделать?

С наилучшими пожеланиями Felix

ответ

3

У меня была такая же проблема. Я понял, что это потому, что вы подклассифицируете Controller, который есть -ContainerAware. Вам нужно предоставить услугу «service_container».

Лучшим вариантом является определение контроллера как службы http://symfony.com/doc/current/cookbook/controller/service.html, а затем ввод его в класс, в котором у вас есть обработчик событий. Это маршрут, который я собираюсь сделать для своего кода, поэтому у меня нет испытал его, но он должен работать. Думал, что я поместил это, чтобы помочь вам.

Смежные вопросы