[ Index ]

PHP Cross Reference of phpBB-3.3.2-deutsch

title

Body

[close]

/vendor/twig/twig/src/Node/ -> WithNode.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of Twig.
   5   *
   6   * (c) Fabien Potencier
   7   *
   8   * For the full copyright and license information, please view the LICENSE
   9   * file that was distributed with this source code.
  10   */
  11  
  12  namespace Twig\Node;
  13  
  14  use Twig\Compiler;
  15  
  16  /**
  17   * Represents a nested "with" scope.
  18   *
  19   * @author Fabien Potencier <fabien@symfony.com>
  20   */
  21  class WithNode extends Node
  22  {
  23      public function __construct(Node $body, ?Node $variables, bool $only, int $lineno, string $tag = null)
  24      {
  25          $nodes = ['body' => $body];
  26          if (null !== $variables) {
  27              $nodes['variables'] = $variables;
  28          }
  29  
  30          parent::__construct($nodes, ['only' => $only], $lineno, $tag);
  31      }
  32  
  33      public function compile(Compiler $compiler)
  34      {
  35          $compiler->addDebugInfo($this);
  36  
  37          if ($this->hasNode('variables')) {
  38              $node = $this->getNode('variables');
  39              $varsName = $compiler->getVarName();
  40              $compiler
  41                  ->write(sprintf('$%s = ', $varsName))
  42                  ->subcompile($node)
  43                  ->raw(";\n")
  44                  ->write(sprintf("if (!twig_test_iterable(\$%s)) {\n", $varsName))
  45                  ->indent()
  46                  ->write("throw new RuntimeError('Variables passed to the \"with\" tag must be a hash.', ")
  47                  ->repr($node->getTemplateLine())
  48                  ->raw(", \$this->getSourceContext());\n")
  49                  ->outdent()
  50                  ->write("}\n")
  51                  ->write(sprintf("\$%s = twig_to_array(\$%s);\n", $varsName, $varsName))
  52              ;
  53  
  54              if ($this->getAttribute('only')) {
  55                  $compiler->write("\$context = ['_parent' => \$context];\n");
  56              } else {
  57                  $compiler->write("\$context['_parent'] = \$context;\n");
  58              }
  59  
  60              $compiler->write(sprintf("\$context = \$this->env->mergeGlobals(array_merge(\$context, \$%s));\n", $varsName));
  61          } else {
  62              $compiler->write("\$context['_parent'] = \$context;\n");
  63          }
  64  
  65          $compiler
  66              ->subcompile($this->getNode('body'))
  67              ->write("\$context = \$context['_parent'];\n")
  68          ;
  69      }
  70  }
  71  
  72  class_alias('Twig\Node\WithNode', 'Twig_Node_With');


Generated: Wed Nov 11 20:28:18 2020 Cross-referenced by PHPXref 0.7.1