vendor/symfony/webpack-encore-bundle/src/Twig/StimulusTwigExtension.php line 50

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of the Symfony WebpackEncoreBundle package.
  4.  * (c) Fabien Potencier <fabien@symfony.com>
  5.  * For the full copyright and license information, please view the LICENSE
  6.  * file that was distributed with this source code.
  7.  */
  8. namespace Symfony\WebpackEncoreBundle\Twig;
  9. use Symfony\WebpackEncoreBundle\Dto\StimulusActionsDto;
  10. use Symfony\WebpackEncoreBundle\Dto\StimulusControllersDto;
  11. use Symfony\WebpackEncoreBundle\Dto\StimulusTargetsDto;
  12. use Twig\Environment;
  13. use Twig\Extension\AbstractExtension;
  14. use Twig\TwigFilter;
  15. use Twig\TwigFunction;
  16. final class StimulusTwigExtension extends AbstractExtension
  17. {
  18.     public function getFunctions(): array
  19.     {
  20.         return [
  21.             new TwigFunction('stimulus_controller', [$this'renderStimulusController'], ['needs_environment' => true'is_safe' => ['html_attr']]),
  22.             new TwigFunction('stimulus_action', [$this'renderStimulusAction'], ['needs_environment' => true'is_safe' => ['html_attr']]),
  23.             new TwigFunction('stimulus_target', [$this'renderStimulusTarget'], ['needs_environment' => true'is_safe' => ['html_attr']]),
  24.         ];
  25.     }
  26.     public function getFilters(): array
  27.     {
  28.         return [
  29.             new TwigFilter('stimulus_controller', [$this'appendStimulusController'], ['is_safe' => ['html_attr']]),
  30.             new TwigFilter('stimulus_action', [$this'appendStimulusAction'], ['is_safe' => ['html_attr']]),
  31.             new TwigFilter('stimulus_target', [$this'appendStimulusTarget'], ['is_safe' => ['html_attr']]),
  32.         ];
  33.     }
  34.     /**
  35.      * @param string $controllerName    the Stimulus controller name
  36.      * @param array  $controllerValues  array of controller values
  37.      * @param array  $controllerClasses array of controller CSS classes
  38.      */
  39.     public function renderStimulusController(Environment $env$controllerName, array $controllerValues = [], array $controllerClasses = []): StimulusControllersDto
  40.     {
  41.         $dto = new StimulusControllersDto($env);
  42.         if (\is_array($controllerName)) {
  43.             trigger_deprecation('symfony/webpack-encore-bundle''v1.15.0''Passing an array as first argument of stimulus_controller() is deprecated.');
  44.             if ($controllerValues || $controllerClasses) {
  45.                 throw new \InvalidArgumentException('You cannot pass an array to the first and second/third argument of stimulus_controller(): check the documentation.');
  46.             }
  47.             $data $controllerName;
  48.             foreach ($data as $controllerName => $controllerValues) {
  49.                 $dto->addController($controllerName$controllerValues);
  50.             }
  51.             return $dto;
  52.         }
  53.         $dto->addController($controllerName$controllerValues$controllerClasses);
  54.         return $dto;
  55.     }
  56.     /**
  57.      * @param array $parameters Parameters to pass to the action. Optional.
  58.      */
  59.     public function renderStimulusAction(Environment $env$controllerNamestring $actionName nullstring $eventName null, array $parameters = []): StimulusActionsDto
  60.     {
  61.         $dto = new StimulusActionsDto($env);
  62.         if (\is_array($controllerName)) {
  63.             trigger_deprecation('symfony/webpack-encore-bundle''v1.15.0''Passing an array as first argument of stimulus_action() is deprecated.');
  64.             if ($actionName || $eventName || $parameters) {
  65.                 throw new \InvalidArgumentException('You cannot pass a string to the second or third argument nor an array to the fourth argument while passing an array to the first argument of stimulus_action(): check the documentation.');
  66.             }
  67.             $data $controllerName;
  68.             foreach ($data as $controllerName => $controllerActions) {
  69.                 if (\is_string($controllerActions)) {
  70.                     $controllerActions = [[$controllerActions]];
  71.                 }
  72.                 foreach ($controllerActions as $possibleEventName => $controllerAction) {
  73.                     if (\is_string($possibleEventName) && \is_string($controllerAction)) {
  74.                         $controllerAction = [$possibleEventName => $controllerAction];
  75.                     } elseif (\is_string($controllerAction)) {
  76.                         $controllerAction = [$controllerAction];
  77.                     }
  78.                     foreach ($controllerAction as $eventName => $actionName) {
  79.                         $dto->addAction($controllerName$actionName\is_string($eventName) ? $eventName null);
  80.                     }
  81.                 }
  82.             }
  83.             return $dto;
  84.         }
  85.         $dto->addAction($controllerName$actionName$eventName$parameters);
  86.         return $dto;
  87.     }
  88.     public function appendStimulusController(StimulusControllersDto $dtostring $controllerName, array $controllerValues = [], array $controllerClasses = []): StimulusControllersDto
  89.     {
  90.         $dto->addController($controllerName$controllerValues$controllerClasses);
  91.         return $dto;
  92.     }
  93.     /**
  94.      * @param array $parameters Parameters to pass to the action. Optional.
  95.      */
  96.     public function appendStimulusAction(StimulusActionsDto $dtostring $controllerNamestring $actionNamestring $eventName null, array $parameters = []): StimulusActionsDto
  97.     {
  98.         $dto->addAction($controllerName$actionName$eventName$parameters);
  99.         return $dto;
  100.     }
  101.     /**
  102.      * @param string      $controllerName the Stimulus controller name
  103.      * @param string|null $targetNames    The space-separated list of target names if a string is passed to the 1st argument. Optional.
  104.      */
  105.     public function renderStimulusTarget(Environment $env$controllerNamestring $targetNames null): StimulusTargetsDto
  106.     {
  107.         $dto = new StimulusTargetsDto($env);
  108.         if (\is_array($controllerName)) {
  109.             trigger_deprecation('symfony/webpack-encore-bundle''v1.15.0''Passing an array as first argument of stimulus_target() is deprecated.');
  110.             if ($targetNames) {
  111.                 throw new \InvalidArgumentException('You cannot pass a string to the second argument while passing an array to the first argument of stimulus_target(): check the documentation.');
  112.             }
  113.             $data $controllerName;
  114.             foreach ($data as $controllerName => $targetNames) {
  115.                 $dto->addTarget($controllerName$targetNames);
  116.             }
  117.             return $dto;
  118.         }
  119.         $dto->addTarget($controllerName$targetNames);
  120.         return $dto;
  121.     }
  122.     /**
  123.      * @param string      $controllerName the Stimulus controller name
  124.      * @param string|null $targetNames    The space-separated list of target names if a string is passed to the 1st argument. Optional.
  125.      */
  126.     public function appendStimulusTarget(StimulusTargetsDto $dtostring $controllerNamestring $targetNames null): StimulusTargetsDto
  127.     {
  128.         $dto->addTarget($controllerName$targetNames);
  129.         return $dto;
  130.     }
  131. }