Не работает своп контроллера Symfony2 - PullRequest
1 голос
/ 12 марта 2012

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

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

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

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

Неустранимая ошибка: вызов функции-члена get () для необъекта в C: \ Users \ Йогурт \ Веб-сайты \ Mobile \ vendor \ symfony \ src \ Symfony \ Bundle \ FrameworkBundle \ Controller \ Controller.phpв строке 189

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

С наилучшими пожеланиями, Феликс

1 Ответ

3 голосов
/ 28 марта 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...