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 $node, ConstantExpression $filterName, Node $arguments, int $lineno, string $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)
  41. {
  42. $compiler->subcompile($this->getNode('node'));
  43. }
  44. }
  45. class_alias('Twig\Node\Expression\Filter\DefaultFilter', 'Twig_Node_Expression_Filter_Default');