Моя цель состоит в том, чтобы выполнить выход из контроллера, способного правильно выполнять механизм выхода из базы. После того, как googling и stackoverflow на некоторых подобных вопросах я попытался реализовать расширение класса LogoutListener, как это предложено в ответе здесь Как зарегистрировать пользователя из приложения Symfony 2, используя его внутренние обработчики, я создал класс, и я добавил параметр " security.logout_listener.class "в параметрах.yml, который импортируется из config.yml.
Именно мой новый класс
# MyBundle/MyLogoutListener.php namespace MyBundle; use Symfony\Component\Security\Http\Firewall\LogoutListener; use Symfony\Component\HttpFoundation\Session\SessionInterface; use Symfony\Component\HttpFoundation\Request; class MyLogoutListener extends LogoutListener{ /** * Whether this request is asking for logout. * * @param Request $request * * @return Boolean */ protected function requiresLogout(Request $request) { if ($request->hasSession()) if ( $request->getSession->get('logout') ) { return true; } } return parent::requiresLogout($request); } }
И строка, которую я добавил в параметрах.yml, – это
security.logout_listener.class: MyBundle\MyLogoutListener
У меня есть хорошо работающие функции выхода, активируемые при входе в систему контроллера, но если я попытаюсь использовать базовые функции выхода из системы Symfony2, я получаю эту ошибку:
Уведомление о времени выполнения: Объявление MyBundle \ MyLogoutListener :: requireLogout () должно быть совместимо с Symfony \ Component \ Security \ Http \ Firewall \ LogoutListener :: requireLogout (Symfony \ Component \ HttpFoundation \ Request $ request)
Для базовой функции выхода из системы я имею в виду конфигурацию в брандмауэре с:
… logout: path: /logout target: /someaction …
Может кто-нибудь объяснить, где проблема? Нужно ли определять службу с помощью MyLogoutListener?