When passing values from an action template (which have already been escaped) to a component or partial, they can get escaped again with undesirable consequences (unless they are passed by $sf_data->getRaw()). This patch catches values that have already been decorated with an escaper and prevents them being decorated twice:
Index: lib/view/escaper/sfOutputEscaper.class.php
===================================================================
--- lib/view/escaper/sfOutputEscaper.class.php (revision 1319)
+++ lib/view/escaper/sfOutputEscaper.class.php (working copy)
@@ -92,8 +92,17 @@
if (is_object($value))
{
- if ($value instanceof Traversable)
+ if ($value instanceof sfOutputEscaper)
{
+ // avoid double decoration when passing values from action template to component/partial
+ $copy = clone $value;
+
+ $copy->escapingMethod = $escapingMethod;
+
+ return $copy;
+ }
+ elseif ($value instanceof Traversable)
+ {
return new sfOutputEscaperIteratorDecorator($escapingMethod, $value);
}
else