将所有方法标记为“安全”

时间:2014-12-02 00:23:04

标签: php twig

我想创建一个充满HTML帮助方法的类:

class FormHelper {
    public function text() {
        return 'hello <b>world</b>';
    }
}   

我注册为全球:

$twig->addGlobal('fh',new FormHelper);

然后我可以从Twig调用方法:

{{ fh.text }}

但他们总是被转义(例如hello &lt;b&gt;world&lt;/b&gt;)。

我知道我可以使用|raw阻止转义,但我想绕过这一点,就像designate a function as safe一样。

类方法可以吗?

1 个答案:

答案 0 :(得分:1)

Twig Globals只是一个存储空间,您可以在其中放置将在上下文中可用的任何变量。没有应用逻辑,就像这些变量存储在本地上下文中一样。

但是你可以迭代你的类的方法并将它们注册为安全函数:

$object = new FormHelper();
foreach (get_class_methods($object) as $method)
{
    $function = new Twig_SimpleFunction("fh_{$method}", array($object, $method), array('is_safe' => array('html')));
    $twig->addFunction($function);
}

请注意,您不能在函数名称中使用点(.),因此您需要调用:

{{ fh_test() }}