diff --git a/CHANGELOG b/CHANGELOG index f80bf7355..b11f367b5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -213,6 +213,7 @@ * 1.39.2 (2019-XX-XX) * fixed Lexer when using custom options containing the # char + * fixed "import" when macros are stored in a template string * 1.39.1 (2019-04-16) diff --git a/src/Node/ImportNode.php b/src/Node/ImportNode.php index e1b5d2a27..e66954bf9 100644 --- a/src/Node/ImportNode.php +++ b/src/Node/ImportNode.php @@ -46,7 +46,7 @@ class ImportNode extends Node ->repr($this->getTemplateName()) ->raw(', ') ->repr($this->getTemplateLine()) - ->raw(')') + ->raw(')->unwrap()') ; } diff --git a/src/Template.php b/src/Template.php index 63e54d169..b54838d32 100644 --- a/src/Template.php +++ b/src/Template.php @@ -301,6 +301,9 @@ abstract class Template return array_unique($names); } + /** + * @return Template|TemplateWrapper + */ protected function loadTemplate($template, $templateName = null, $line = null, $index = null) { try { @@ -341,6 +344,16 @@ abstract class Template } } + /** + * @internal + * + * @return Template + */ + protected function unwrap() + { + return $this; + } + /** * Returns all blocks. * diff --git a/src/TemplateWrapper.php b/src/TemplateWrapper.php index 2f65d7f72..e5268668b 100644 --- a/src/TemplateWrapper.php +++ b/src/TemplateWrapper.php @@ -126,6 +126,16 @@ final class TemplateWrapper { return $this->template->getTemplateName(); } + + /** + * @internal + * + * @return Template + */ + public function unwrap() + { + return $this->template; + } } class_alias('Twig\TemplateWrapper', 'Twig_TemplateWrapper'); diff --git a/test/Twig/Tests/Fixtures/tags/macro/import_from_string_template.test b/test/Twig/Tests/Fixtures/tags/macro/import_from_string_template.test new file mode 100644 index 000000000..6c1817be7 --- /dev/null +++ b/test/Twig/Tests/Fixtures/tags/macro/import_from_string_template.test @@ -0,0 +1,10 @@ +--TEST-- +"import" tag with a template as string +--TEMPLATE-- +{% import template_from_string("{% macro test() %}ok{% endmacro %}") as m %} +{{ m.test() }} +--TEMPLATE(forms.twig)-- +--DATA-- +return [] +--EXPECT-- +ok diff --git a/test/Twig/Tests/Node/ImportTest.php b/test/Twig/Tests/Node/ImportTest.php index 56e56e688..2118bff59 100644 --- a/test/Twig/Tests/Node/ImportTest.php +++ b/test/Twig/Tests/Node/ImportTest.php @@ -36,7 +36,7 @@ class Twig_Tests_Node_ImportTest extends NodeTestCase $tests[] = [$node, <<loadTemplate("foo.twig", null, 1); +\$context["macro"] = \$this->loadTemplate("foo.twig", null, 1)->unwrap(); EOF ]; diff --git a/test/Twig/Tests/Node/ModuleTest.php b/test/Twig/Tests/Node/ModuleTest.php index 27109fa64..1e2d2b640 100644 --- a/test/Twig/Tests/Node/ModuleTest.php +++ b/test/Twig/Tests/Node/ModuleTest.php @@ -156,7 +156,7 @@ class __TwigTemplate_%x extends \Twig\Template protected function doDisplay(array \$context, array \$blocks = []) { // line 2 - \$context["macro"] = \$this->loadTemplate("foo.twig", "foo.twig", 2); + \$context["macro"] = \$this->loadTemplate("foo.twig", "foo.twig", 2)->unwrap(); // line 1 \$this->parent = \$this->loadTemplate("layout.twig", "foo.twig", 1); \$this->parent->display(\$context, array_merge(\$this->blocks, \$blocks));