<?php
namespace App\Admin\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use App\Admin\Controller\BaseController;
class ActionSubscriber implements EventSubscriberInterface
{
private $_controller;
public function onKernelController(ControllerEvent $event)
{
$controller = $event->getController();
/*
* $controller passed can be either a class or a Closure.
* This is not usual in Symfony but it may happen.
* If it is a class, it comes in array format
*/
if (!is_array($controller))
return;
if ($controller[0] instanceof BaseController)
{
$this->_controller = $controller[0];
$this->_controller->beforeAction();
}
}
public function onKernelResponse(ResponseEvent $event)
{
if ($this->_controller)
$this->_controller->afterAction();
}
public static function getSubscribedEvents()
{
return array(
KernelEvents::CONTROLLER => 'onKernelController',
KernelEvents::RESPONSE => 'onKernelResponse'
);
}
}