diff --git a/CHANGELOG b/CHANGELOG index af2b09169..fd6f953b7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,6 @@ * 2.8.1 (2019-XX-XX) - * n/a + * deprecated Node::setTemplateName() in favor of Node::setSourceContext() * 2.8.0 (2019-04-16) diff --git a/src/Node/ModuleNode.php b/src/Node/ModuleNode.php index c0eaf28d1..745ec3a39 100644 --- a/src/Node/ModuleNode.php +++ b/src/Node/ModuleNode.php @@ -58,7 +58,6 @@ class ModuleNode extends Node ], 1); // populate the template name of all node children - $this->setTemplateName($source->getName()); $this->setSourceContext($source); } diff --git a/src/Node/Node.php b/src/Node/Node.php index dce827deb..1cc375c4b 100644 --- a/src/Node/Node.php +++ b/src/Node/Node.php @@ -168,17 +168,25 @@ class Node implements \Countable, \IteratorAggregate return new \ArrayIterator($this->nodes); } - public function setTemplateName($name) + /** + * @deprecated since 2.8 (to be removed in 3.0) + */ + public function setTemplateName($name/*, $triggerDeprecation = true */) { + $triggerDeprecation = 2 > \func_num_args() || \func_get_arg(1); + if ($triggerDeprecation) { + @trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0. Use setSourceContext() instead.', E_USER_DEPRECATED); + } + $this->name = $name; foreach ($this->nodes as $node) { - $node->setTemplateName($name); + $node->setTemplateName($name, $triggerDeprecation); } } public function getTemplateName() { - return $this->name; + return $this->sourceContext ? $this->sourceContext->getName() : null; } public function setSourceContext(Source $source) @@ -187,6 +195,8 @@ class Node implements \Countable, \IteratorAggregate foreach ($this->nodes as $node) { $node->setSourceContext($source); } + + $this->setTemplateName($source->getName(), false); } public function getSourceContext() diff --git a/test/Twig/Tests/Node/DeprecatedTest.php b/test/Twig/Tests/Node/DeprecatedTest.php index 858023b9d..ac650a60f 100644 --- a/test/Twig/Tests/Node/DeprecatedTest.php +++ b/test/Twig/Tests/Node/DeprecatedTest.php @@ -17,6 +17,7 @@ use Twig\Node\Expression\FunctionExpression; use Twig\Node\IfNode; use Twig\Node\Node; use Twig\Test\NodeTestCase; +use Twig\Source; use Twig\TwigFunction; class Twig_Tests_Node_DeprecatedTest extends NodeTestCase @@ -35,7 +36,7 @@ class Twig_Tests_Node_DeprecatedTest extends NodeTestCase $expr = new ConstantExpression('This section is deprecated', 1); $node = new DeprecatedNode($expr, 1, 'deprecated'); - $node->setTemplateName('foo.twig'); + $node->setSourceContext(new Source('', 'foo.twig')); $tests[] = [$node, <<setTemplateName('foo.twig'); + $node->setSourceContext(new Source('', 'foo.twig')); $tests[] = [$node, <<setTemplateName('foo.twig'); + $node->setSourceContext(new Source('', 'foo.twig')); $compiler = $this->getCompiler($environment); $varName = $compiler->getVarName();