src/Eccube/DependencyInjection/Compiler/PluginPass.php line 34

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Eccube\DependencyInjection\Compiler;
  13. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  14. use Symfony\Component\DependencyInjection\ContainerBuilder;
  15. /**
  16.  * プラグインのコンポーネント定義を制御するクラス.
  17.  */
  18. class PluginPass implements CompilerPassInterface
  19. {
  20.     /**
  21.      * プラグインのコンポーネント定義を制御する.
  22.      *
  23.      * 無効状態のプラグインに対し, 付与されているサービスタグをクリアすることで,
  24.      * プラグインが作成しているEventListener等の拡張機構が呼び出されないようにする.
  25.      *
  26.      * サービスタグが収集されるタイミング(一般的にPassConfig::TYPE_BEFORE_OPTIMIZATIONの0)より先に実行される必要があります.
  27.      *
  28.      * @param ContainerBuilder $container
  29.      */
  30.     public function process(ContainerBuilder $container)
  31.     {
  32.         // 無効状態のプラグインコード一覧を取得.
  33.         // 無効なプラグインの一覧はEccubeExtensionで定義している.
  34.         $plugins $container->getParameter('eccube.plugins.disabled');
  35.         if (empty($plugins)) {
  36.             $container->log($this'disabled plugins not found.');
  37.             return;
  38.         }
  39.         $definitions $container->getDefinitions();
  40.         foreach ($definitions as $definition) {
  41.             $class $definition->getClass();
  42.             foreach ($plugins as $plugin) {
  43.                 $namespace 'Plugin\\'.$plugin.'\\';
  44.                 if (false !== \strpos($class$namespace)) {
  45.                     foreach ($definition->getTags() as $tag => $attr) {
  46.                         // PluginManagerからレポジトリを取得する場合があるため,
  47.                         // doctrine.repository_serviceタグはスキップする.
  48.                         if ($tag === 'doctrine.repository_service') {
  49.                             continue;
  50.                         }
  51.                         $definition->clearTag($tag);
  52.                     }
  53.                 }
  54.             }
  55.         }
  56.     }
  57. }