在Zend_View中自动逃避变量的最佳方法是什么?

时间:2010-07-05 18:16:47

标签: zend-framework zend-view

一两个星期前我刚认真地开始使用Zend Framework,并且无法使用Zend_View :: escape()手动转义。 有没有人知道如何在不使用$ this-> escape()的情况下自动逃避模板中的变量(Zend_View模板),或任何其他棘手的方法,如输出缓冲和PREG替换* .phtml文件。

我想知道这种情况下的最佳做法。

5 个答案:

答案 0 :(得分:2)

您可以扩展Zend_View以创建自动显示事物的自定义视图类,或者您可以使用视图助手来打开/关闭自动调整。

我写了一篇关于它的博文,其中包含两种方法的示例代码: How to automatically escape template variables in Zend_View

答案 1 :(得分:2)

在PiKe项目中,我们构建了一个自定义流包装器,它可以自动转义所有视图变量,并且MINIMAL性能最高!您仍然可以通过以下方式获取RAW值:

<?=~ $variable ?>

注意“〜”字符。结帐http://code.google.com/p/php-pike/wiki/Pike_View_Stream

我知道你说你想避免“输出缓冲和PREG替换* .phtml文件等棘手的方法。”但我仍然认为这是修复Zend Framework 1中自动转义的一种非常巧妙的方法。

答案 2 :(得分:0)

你说“自动”,所以我相信这意味着当你回复$ this-&gt; var;你希望它逃脱。好吧,如果是这种情况,也许你可以在变量设置为视图时进行转义。 AFAIK它是在Zend_View_Abstract类'__set魔术方法*(第300行)中完成的。建议不要更改核心ZF代码,因此可以通过扩展Z_V_A或Z_V来覆盖__set方法。

*我不是100%确定Z_V_A :: __ set是将params分配给视图的唯一地方,但我认为应该是。想不出任何其他地方。

编辑:就个人而言,我会避免这种情况,只需坚持使用好的'$ this-&gt; escape()。更多打字但背景中的魔法更少。

答案 3 :(得分:0)

你已经要求最佳实践,那么你所做的就是它。 等到您想要显示数据时才修改它,仅出于输出原因。

我理解你发现写作 - &gt; escape()每次都很乏味,但它还有很长的路要走。

如果你在哪里自动逃避一切,那么当你想要/需要未转义的数据时,你会遇到问题。

答案 4 :(得分:0)

ZendX_View_Autoescaping,这个项目为您提供了一个ViewRenderer,它可以自动控制所有已分配的视图变量。

https://github.com/jensklose/ZendX_View_Autoescaping

试试吧!

它支持:

  • 逃避深层数据结构
  • 转义数组键
  • 切换转义上下文的可能性(html,json,nofilter)