vendor/php-flasher/flasher-symfony/Support/Extension.php line 73

  1. <?php
  2. /*
  3.  * This file is part of the PHPFlasher package.
  4.  * (c) Younes KHOUBZA <younes.khoubza@gmail.com>
  5.  */
  6. namespace Flasher\Symfony\Support;
  7. use Flasher\Prime\Plugin\PluginInterface;
  8. use Flasher\Symfony\Bridge\Bridge;
  9. use Flasher\Symfony\Bridge\DependencyInjection\FlasherExtension;
  10. use Symfony\Component\Config\Definition\ConfigurationInterface;
  11. use Symfony\Component\DependencyInjection\ChildDefinition;
  12. use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
  13. use Symfony\Component\DependencyInjection\ContainerBuilder;
  14. use Symfony\Component\DependencyInjection\DefinitionDecorator;
  15. final class Extension extends FlasherExtension implements CompilerPassInterface
  16. {
  17.     /**
  18.      * @var PluginInterface
  19.      */
  20.     private $plugin;
  21.     public function __construct(PluginInterface $plugin)
  22.     {
  23.         $this->plugin $plugin;
  24.     }
  25.     /**
  26.      * {@inheritdoc}
  27.      *
  28.      * @param array<int, array<string, mixed>> $configs
  29.      *
  30.      * @return void
  31.      */
  32.     public function load(array $configsContainerBuilder $container)
  33.     {
  34.         /** @var ChildDefinition $definition */
  35.         $definition class_exists('Symfony\Component\DependencyInjection\ChildDefinition')
  36.             ? new ChildDefinition('flasher.notification_factory')
  37.             : new DefinitionDecorator('flasher.notification_factory'); // @phpstan-ignore-line
  38.         $definition
  39.             ->setClass($this->plugin->getFactory())
  40.             ->setPublic(true)
  41.             ->addTag('flasher.factory', array('alias' => $this->plugin->getAlias()));
  42.         $identifier $this->plugin->getServiceID();
  43.         $container->setDefinition($identifier$definition);
  44.         if (Bridge::canLoadAliases()) {
  45.             $container->setAlias($this->plugin->getFactory(), $identifier);
  46.         }
  47.     }
  48.     /**
  49.      * {@inheritdoc}
  50.      */
  51.     public function getFlasherAlias()
  52.     {
  53.         return $this->plugin->getName();
  54.     }
  55.     /**
  56.      * Returns extension configuration.
  57.      *
  58.      * @param array<int, array<string, mixed>> $config
  59.      *
  60.      * @return ConfigurationInterface|null
  61.      */
  62.     public function getConfiguration(array $configContainerBuilder $container)
  63.     {
  64.         return new Configuration($this->plugin);
  65.     }
  66.     /**
  67.      * {@inheritdoc}
  68.      *
  69.      * @return void
  70.      */
  71.     public function process(ContainerBuilder $container)
  72.     {
  73.         $configs $this->processConfiguration(
  74.             new Configuration($this->plugin),
  75.             $container->getExtensionConfig($this->plugin->getName())
  76.         );
  77.         $this->processResourceConfiguration($configs$container);
  78.     }
  79.     /**
  80.      * @param array<string, mixed> $configs
  81.      *
  82.      * @return void
  83.      */
  84.     protected function processResourceConfiguration(array $configsContainerBuilder $container)
  85.     {
  86.         if (!$container->has('flasher.resource_manager')) {
  87.             return;
  88.         }
  89.         $definition $container->getDefinition('flasher.resource_manager');
  90.         $handler $this->plugin->getAlias();
  91.         $scripts = isset($configs['scripts']) ? $configs['scripts'] : array();
  92.         $definition->addMethodCall('addScripts', array($handler$scripts));
  93.         $styles = isset($configs['styles']) ? $configs['styles'] : array();
  94.         $definition->addMethodCall('addStyles', array($handler$styles));
  95.         $options = isset($configs['options']) ? $configs['options'] : array();
  96.         $definition->addMethodCall('addOptions', array($handler$options));
  97.     }
  98. }