vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php line 32

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of Twig.
  4.  *
  5.  * (c) Fabien Potencier
  6.  *
  7.  * For the full copyright and license information, please view the LICENSE
  8.  * file that was distributed with this source code.
  9.  */
  10. namespace Twig\Node\Expression\Filter;
  11. use Twig\Compiler;
  12. use Twig\Node\Expression\ConditionalExpression;
  13. use Twig\Node\Expression\ConstantExpression;
  14. use Twig\Node\Expression\FilterExpression;
  15. use Twig\Node\Expression\GetAttrExpression;
  16. use Twig\Node\Expression\NameExpression;
  17. use Twig\Node\Expression\Test\DefinedTest;
  18. use Twig\Node\Node;
  19. /**
  20.  * Returns the value or the default value when it is undefined or empty.
  21.  *
  22.  *  {{ var.foo|default('foo item on var is not defined') }}
  23.  *
  24.  * @author Fabien Potencier <fabien@symfony.com>
  25.  */
  26. class DefaultFilter extends FilterExpression
  27. {
  28.     public function __construct(Node $nodeConstantExpression $filterNameNode $argumentsint $linenostring $tag null)
  29.     {
  30.         $default = new FilterExpression($node, new ConstantExpression('default'$node->getTemplateLine()), $arguments$node->getTemplateLine());
  31.         if ('default' === $filterName->getAttribute('value') && ($node instanceof NameExpression || $node instanceof GetAttrExpression)) {
  32.             $test = new DefinedTest(clone $node'defined', new Node(), $node->getTemplateLine());
  33.             $false = \count($arguments) ? $arguments->getNode(0) : new ConstantExpression(''$node->getTemplateLine());
  34.             $node = new ConditionalExpression($test$default$false$node->getTemplateLine());
  35.         } else {
  36.             $node $default;
  37.         }
  38.         parent::__construct($node$filterName$arguments$lineno$tag);
  39.     }
  40.     public function compile(Compiler $compiler): void
  41.     {
  42.         $compiler->subcompile($this->getNode('node'));
  43.     }
  44. }