У меня есть этот слушатель:
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\HttpFoundation\Request;
class ControllerListener
{
public function onKernelController( FilterControllerEvent $event, Request $request )
{
if (HttpKernelInterface::MASTER_REQUEST === $event->getRequestType()) {
$controllers = $event->getController();
if (is_array( $controllers )) {
$controller = $controllers[0];
if (is_object( $controller )) {
if (method_exists( $controller, 'parControl' )) {
$controller->parControl(
$controller->getRequest(),
$controller->getRequest()->get( 'action' ),
$controller->getRequest()->get( 'context' ),
$controller->getRequest()->get( 'page' ),
$controller->getRequest()->get( 'case' ),
$controller->getRequest()->get( 'subset' )
);
}
if (method_exists( $controller, 'adminProjectControl' )) {
// to this method I need to pass Request $request
$controller->adminProjectControl($request);
}
if (method_exists( $controller, 'accessControl' )) {
$controller->accessControl();
}
}
}
}
}
public function onKernelResponse( FilterResponseEvent $event )
{
Utilities::flashDebugLoginMessage();
}
}
И это определяется как услуга в services.yml
:
pdone.listener.preexecute:
class: GroupDCA\PDOneBundle\Listener\ControllerListener
arguments: [@request]
public: true
scope: request
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
- { name: kernel.event_listener, event: kernel.response, method: onKernelResponse }
Но я должен сделать что-то не так, так как я получил эти три ошибки:
ContextErrorException в ControllerListener.php, строка 12: Catchable Fatal Error: Аргумент 2, переданный в GroupDCA\PDOneBundle\Listener\ControllerListener::onKernelController(), должен быть экземпляром Symfony\Component\HttpFoundation\Request, указанная строка
ContextErrorException в ControllerListener.php, строка 12: Catchable Fatal Error: Аргумент 2, переданный в GroupDCA\PDOneBundle\Listener\ControllerListener::onKernelController(), должен быть экземпляром Symfony\Component\HttpFoundation\Request, указанная строка
LogicException в строке bootstrap.php.cache 3118: ни один слушатель события «kernel.exception» не установил ответ
Итак, как мне ввести запрос слушателю? Могу ли я сделать это? Я также прочитал этот пост, но не понял, как сделай это.
FilterControllerEvent
), имя события (kernel.controller
) и диспетчер событий (@event_dispatcher
) - вот почему вы получаете сообщение об ошибке, что второй аргумент является строкой, поскольку это название события. Это может быть полезно, если вы хотите сцепить событие без необходимости вводить@event_dispatcher
в каждого слушателя/подписчика. - person qooplmao   schedule 15.04.2015