fixed template_from_string when the template includes or extends other ones
authorFabien Potencier <fabien.potencier@gmail.com>
Sat, 3 Aug 2013 17:05:30 +0000 (19:05 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 3 Aug 2013 17:28:34 +0000 (19:28 +0200)
CHANGELOG
lib/Twig/Extension/StringLoader.php
test/Twig/Tests/Fixtures/functions/template_from_string.test

index 8be8ca6..b5b2074 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
 * 1.14.0 (2013-XX-XX)
 
+ * fixed template_from_string when the template includes or extends other ones
  * added support for calling macros defined in a template without importing them first
  * added support for named arguments for macros
  * replaced a PHP fatal error with an exception when  a macro does not exist
index 20f3f99..a1cef87 100644 (file)
@@ -43,16 +43,14 @@ class Twig_Extension_StringLoader extends Twig_Extension
  */
 function twig_template_from_string(Twig_Environment $env, $template)
 {
-    static $loader;
+    $loader = new Twig_Loader_Chain(array(
+        new Twig_Loader_Array(array('__string_template__' => $template)),
+        $current = $env->getLoader(),
+    ));
 
-    if (null === $loader) {
-        $loader = new Twig_Loader_String();
-    }
-
-    $current = $env->getLoader();
     $env->setLoader($loader);
     try {
-        $template = $env->loadTemplate($template);
+        $template = $env->loadTemplate('__string_template__');
     } catch (Exception $e) {
         $env->setLoader($current);
 
index 41428da..3d3b958 100644 (file)
@@ -4,8 +4,12 @@
 {% include template_from_string(template) %}
 
 {% include template_from_string("Hello {{ name }}") %}
+{% include template_from_string('{% extends "parent.twig" %}{% block content %}Hello {{ name }}{% endblock %}') %}
+--TEMPLATE(parent.twig)--
+{% block content %}{% endblock %}
 --DATA--
 return array('name' => 'Fabien', 'template' => "Hello {{ name }}")
 --EXPECT--
 Hello Fabien
 Hello Fabien
+Hello Fabien