Silex中Twig的自定义过滤器

时间:2013-01-09 23:21:39

标签: twig silex twig-filter

我需要在Silex框架中为Twig添加自定义过滤器。例如,我想将此函数应用于某个变量:

public function addExclamation($text) {
    return $text.'!!!';
}

在twig-template中执行以下操作:

{{ text|exclam }}

阅读http://twig.sensiolabs.org/doc/advanced.html后,我创建了“Project_Twig_Extension.php”:

class Project_Twig_Extension extends Twig_Extension
{
    public function getName()
    {
        return 'project';
    }

    public function getFilters()
    {
        return array(
            new Twig_SimpleFilter('exclam', 'addExclamation'),
        );
    }

    public function addExclamation($text) {
        return $text.'!!!';
    }
}

但我不能说明我需要放置此文件以及如何在Silex的“index.php”中注册此过滤器。

你能给我一步一步的指导吗? Twig addFilter using Silex?中描述的方法不起作用。

2 个答案:

答案 0 :(得分:1)

您可以添加以下自定义过滤器:

$app['twig'] = $app->share($app->extend('twig', function(\Twig_Environment $twig) {
    $twig->addFilter(new Twig_SimpleFilter('exclaim', function ($value) {
        return $value.'!!!';
    }));

    return $twig;
}));

参考:http://silex.sensiolabs.org/doc/providers/twig.html#customization

答案 1 :(得分:1)

对于记录,现在注册Twig扩展的新方法如下:

$app['twig'] = $app->extend('twig', function (\Twig_Environment $twig, Silex\Application $app) {
    $twig->addExtension(new My_Twig_Extension($app));

    return $twig;
});

文档http://silex.sensiolabs.org/doc/providers/twig.html#customization已更新。