一两个星期前,我刚开始认真使用 Zend Framework,但在使用 Zend_View::escape() 手动转义时遇到了麻烦。有谁知道如何在不使用 $this->escape() 或任何其他棘手的方式(如输出缓冲和 PREG 替换 *.phtml 文件)的情况下自动转义模板(Zend_View 模板)中的变量。
我想知道在这种情况下的最佳做法。
一两个星期前,我刚开始认真使用 Zend Framework,但在使用 Zend_View::escape() 手动转义时遇到了麻烦。有谁知道如何在不使用 $this->escape() 或任何其他棘手的方式(如输出缓冲和 PREG 替换 *.phtml 文件)的情况下自动转义模板(Zend_View 模板)中的变量。
我想知道在这种情况下的最佳做法。
你可以扩展 Zend_View 来创建一个自动转义的自定义视图类,或者你可以使用视图助手来打开/关闭自动转义。
我写了一篇关于它的博文,其中包含两种方法的示例代码: 如何在 Zend_View 中自动转义模板变量
在 PiKe 项目中,我们构建了一个自定义流包装器,它可以自动转义所有视图变量,并且对性能的影响很小!您仍然可以通过以下方式获取 RAW 值:
<?=~ $variable ?>
注意“~”字符。结帐http://code.google.com/p/php-pike/wiki/Pike_View_Stream
我知道你说过你想避免“像输出缓冲和 PREG 替换 *.phtml 文件这样的棘手方法”,但我仍然认为这是在 Zend Framework 1 中修复自动转义的一种非常巧妙的方法。
您已经要求最佳实践,那么您正在做的已经是它了。等到您想显示数据时再修改它,仅出于输出原因。
我知道你每次都觉得写 ->escape() 很乏味,但它仍然是要走的路。
如果您在哪里自动转义所有内容,那么有一天您想要/需要未转义的数据时会遇到问题。
你说“自动”,所以我相信这意味着当你做 echo $this->var; 你想让它逃脱。好吧,如果是这种情况,也许您可以在将变量设置为视图时进行转义。AFAIK 它是在 Zend_View_Abstract 类的 __set 魔术方法* 中完成的(大约第 300 行)。不建议更改核心 ZF 代码,因此您可以通过扩展 Z_V_A 或 Z_V 并覆盖 __set 方法。
*我不是 100% 确定 Z_V_A::__set 是唯一将参数分配给视图的地方,但我认为它应该是。想不出任何其他地方。
编辑:就个人而言,我会避免这种情况并坚持使用好的 ol' $this->escape()。更多的打字,但更少的魔法在后台发生。
ZendX_View_Autoescaping
,这个项目为您提供了一个 ViewRenderer,它可以自动转义所有分配的视图变量。
https://github.com/jensklose/ZendX_View_Autoescaping
试试看!
它支持: