src/AppBundle/EventListener/KernelEventListener.php line 52

Open in your IDE?
  1. <?php
  2. namespace AppBundle\EventListener;
  3. use Symfony\Bundle\FrameworkBundle\Console\Application;
  4. use Symfony\Component\DependencyInjection\ContainerInterface as Container;
  5. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  6. use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
  7. use Symfony\Component\HttpKernel\Event\GetResponseForControllerResultEvent;
  8. use Symfony\Component\HttpKernel\HttpKernelInterface;
  9. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  10. use Symfony\Component\Console\Input\ArrayInput;
  11. use Symfony\Component\Console\Output\BufferedOutput;
  12. /**
  13.  * Class KernelEventListener
  14.  * @package AppBundle\EventListener
  15.  */
  16. class KernelEventListener
  17. {
  18.     protected $container;
  19.     public function __construct(Container $container)
  20.     {
  21.         $this->container $container;
  22.     }
  23.     /**
  24.      * Controller に before() メソッドがある場合は事前に実行する。
  25.      *
  26.      * @param FilterControllerEvent $event
  27.      */
  28.     public function onKernelController(FilterControllerEvent $event)
  29.     {
  30.         $controller $event->getController();
  31.         $request $event->getRequest();
  32.         if (!is_array($controller)) {
  33.             return;
  34.         }
  35.         $this->initConfig();
  36.         if(method_exists($controller[0], 'before') ){
  37.             $controller[0]->before($event);
  38.         }
  39.         
  40.         if(method_exists($controller[0], 'beforeFilter') ){
  41.             $controller[0]->beforeFilter($event);
  42.         }
  43.     }
  44.     public function onKernelFinishRequest(FinishRequestEvent $event)
  45.     {
  46.         $configDir CMS__ADMIN_DIR 'cms/app/config/';
  47.         // 置き換え予定のファイルが有れば置き換える
  48.         $cacheClearRequired false;
  49.         if(file_exists($configDir '_bundles.xml')){
  50.             rename($configDir '_bundles.xml'$configDir 'bundles.xml');
  51.             $cacheClearRequired true;
  52.         }
  53.         if(file_exists($configDir '_mod_routing.yml')){
  54.             rename($configDir '_mod_routing.yml'$configDir 'mod_routing.yml');
  55.             $cacheClearRequired true;
  56.         }
  57.         if($cacheClearRequired){
  58.             $app = new Application($this->container->get('kernel'));
  59.             $app->setAutoExit(false);
  60.             $input = new ArrayInput([
  61.                 'command' => 'cache:clear'
  62.             ]);
  63.             $output = new BufferedOutput();
  64.             $app->run($input$output);
  65.         }
  66.     }
  67.     public function onKernelResponse(FilterResponseEvent $event)
  68.     {
  69.         $response $event->getResponse();
  70.     }
  71.     protected function initConfig()
  72.     {
  73.         $config $this->container->get('app.config');
  74.         if($this->container->hasParameter('app.config')){
  75.             $params $this->container->getParameter('app.config');
  76.         } else {
  77.             $params = [];
  78.         }
  79.         if(is_array($params)) {
  80.             foreach ($params as $key => $value) {
  81.                 $config->set($key$value);
  82.             }
  83.         }
  84.     }
  85. }