]>
Commit | Line | Data |
---|---|---|
a4565e88 NL |
1 | <?php |
2 | ||
3 | /* | |
4 | * This file is part of Twig. | |
5 | * | |
6 | * (c) 2011 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 | /** | |
13 | * Returns the value or the default value when it is undefined or empty. | |
14 | * | |
15 | * <pre> | |
16 | * {{ var.foo|default('foo item on var is not defined') }} | |
17 | * </pre> | |
18 | * | |
19 | * @author Fabien Potencier <fabien@symfony.com> | |
20 | */ | |
21 | class Twig_Node_Expression_Filter_Default extends Twig_Node_Expression_Filter | |
22 | { | |
23 | public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null) | |
24 | { | |
25 | $default = new Twig_Node_Expression_Filter($node, new Twig_Node_Expression_Constant('default', $node->getLine()), $arguments, $node->getLine()); | |
26 | ||
27 | if ('default' === $filterName->getAttribute('value') && ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr)) { | |
28 | $test = new Twig_Node_Expression_Test_Defined(clone $node, 'defined', new Twig_Node(), $node->getLine()); | |
29 | $false = count($arguments) ? $arguments->getNode(0) : new Twig_Node_Expression_Constant('', $node->getLine()); | |
30 | ||
31 | $node = new Twig_Node_Expression_Conditional($test, $default, $false, $node->getLine()); | |
32 | } else { | |
33 | $node = $default; | |
34 | } | |
35 | ||
36 | parent::__construct($node, $filterName, $arguments, $lineno, $tag); | |
37 | } | |
38 | ||
39 | public function compile(Twig_Compiler $compiler) | |
40 | { | |
41 | $compiler->subcompile($this->getNode('node')); | |
42 | } | |
43 | } |