added a recipe for stateful node visitors
authorFabien Potencier <fabien.potencier@gmail.com>
Sat, 7 Jan 2012 08:53:33 +0000 (09:53 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 7 Jan 2012 08:53:33 +0000 (09:53 +0100)
doc/recipes.rst

index 122c777..0335335 100644 (file)
@@ -275,4 +275,27 @@ rewrites the cache::
         }
     }
 
+Reusing a stateful Node Visitor
+-------------------------------
+
+When attaching a visitor to a ``Twig_Environment`` instance, Twig uses it to
+visit *all* templates it compiles. If you need to keep some state information
+around, you probably want to reset it when visiting a new template.
+
+This can be easily achieved with the following code::
+
+    protected $someTemplateState = array();
+
+    public function enterNode(Twig_NodeInterface $node, Twig_Environment $env)
+    {
+        if ($node instanceof Twig_Node_Module) {
+            // reset the state as we are entering a new template
+            $this->someTemplateState = array();
+        }
+
+        // ...
+
+        return $node;
+    }
+
 .. _callback: http://www.php.net/manual/en/function.is-callable.php