vendor/pimcore/pimcore/lib/Twig/Extension/TemplatingHelperExtension.php line 118

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * Pimcore
  5.  *
  6.  * This source file is available under two different licenses:
  7.  * - GNU General Public License version 3 (GPLv3)
  8.  * - Pimcore Enterprise License (PEL)
  9.  * Full copyright and license information is available in
  10.  * LICENSE.md which is distributed with this source code.
  11.  *
  12.  * @copyright  Copyright (c) Pimcore GmbH (http://www.pimcore.org)
  13.  * @license    http://www.pimcore.org/license     GPLv3 and PEL
  14.  */
  15. namespace Pimcore\Twig\Extension;
  16. use Pimcore\Templating\PhpEngine;
  17. use Symfony\Component\Templating\Helper\HelperInterface;
  18. use Twig\Extension\AbstractExtension;
  19. use Twig\TwigFunction;
  20. /**
  21.  * Delegates calls to PHP templating helpers. Use this only with templating helpers which do not rely
  22.  * on PHP rendering!
  23.  *
  24.  * @deprecated
  25.  */
  26. class TemplatingHelperExtension extends AbstractExtension
  27. {
  28.     /**
  29.      * @var PhpEngine
  30.      */
  31.     private $phpEngine;
  32.     /**
  33.      * @param PhpEngine $phpEngine
  34.      */
  35.     public function __construct(PhpEngine $phpEngine)
  36.     {
  37.         $this->phpEngine $phpEngine;
  38.     }
  39.     public function getFunctions(): array
  40.     {
  41.         $helperNames = [
  42.             'headLink' => 'pimcore_head_link',
  43.             'headMeta' => 'pimcore_head_meta',
  44.             'headScript' => 'pimcore_head_script',
  45.             'headStyle' => 'pimcore_head_style',
  46.             'headTitle' => 'pimcore_head_title',
  47.             'inlineScript' => 'pimcore_inline_script',
  48.             'breachAttackRandomContent' => 'pimcore_breach_attack_random_content',
  49.             'placeholder' => 'pimcore_placeholder',
  50.             'cache' => 'pimcore_cache',
  51.             'device' => 'pimcore_device',
  52.             'pimcoreUrl' => [
  53.                 'name' => 'pimcore_url',
  54.                 'is_safe' => null,
  55.             ],
  56.         ];
  57.         $functions = [];
  58.         foreach ($helperNames as $helperName => $helperOptions) {
  59.             $functionName null;
  60.             $options = [
  61.                 'is_safe' => ['html'],
  62.             ];
  63.             if (is_string($helperOptions)) {
  64.                 $functionName $helperOptions;
  65.             } else {
  66.                 if (!isset($helperOptions['name'])) {
  67.                     throw new \LogicException('A helper declaration needs to define a Twig function name');
  68.                 }
  69.                 $functionName $helperOptions['name'];
  70.                 unset($helperOptions['name']);
  71.                 $options array_merge($options$helperOptions);
  72.             }
  73.             $callable = function () use ($helperName) {
  74.                 return $this->callHelper($helperNamefunc_get_args());
  75.             };
  76.             $functions[] = new TwigFunction($functionName$callable$options);
  77.         }
  78.         return $functions;
  79.         // those are just for auto-complete, not nice, but works ;-)
  80.         new TwigFunction('pimcore_head_link');
  81.         new TwigFunction('pimcore_head_meta');
  82.         new TwigFunction('pimcore_head_script');
  83.         new TwigFunction('pimcore_head_style');
  84.         new TwigFunction('pimcore_head_title');
  85.         new TwigFunction('pimcore_inline_script');
  86.         new TwigFunction('pimcore_placeholder');
  87.         new TwigFunction('pimcore_cache');
  88.         new TwigFunction('pimcore_device');
  89.         new TwigFunction('pimcore_url');
  90.         new TwigFunction('pimcore_breach_attack_random_content');
  91.     }
  92.     /**
  93.      * Calls a helper with arguments
  94.      *
  95.      * @param string $helperName
  96.      * @param array $arguments
  97.      *
  98.      * @return mixed|HelperInterface
  99.      */
  100.     public function callHelper(string $helperName, array $arguments = [])
  101.     {
  102.         $helper $this->phpEngine->get($helperName);
  103.         // helper implements __invoke -> run it directly
  104.         if (is_callable($helper)) {
  105.             return call_user_func_array($helper$arguments);
  106.         }
  107.         return $helper;
  108.     }
  109. }