【问题标题】:Twig addFilter using Silex?使用 Silex 的 Twig addFilter?
【发布时间】:2012-03-19 05:53:04
【问题描述】:

在使用 Silex 时将自定义过滤器连接到 Twig 的正确方法是什么,但保持现有 twig.options 不变?

这就是我的意思。我有以下代码:

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => dirname(__FILE__).'/view',
    'twig.class_path' => dirname(__FILE__).'/vendor/twig/lib',
    'twig.options' => array('cache'=>'folder/twig')
));

function test() {
    return 'yay';
}

$app['twig']->addFilter('test',new \Twig_Filter_Function('test'));

如果我按原样运行该代码,则过滤器不起作用。

相反,Twig 返回 PREVIOUS REQUEST 的无限缓存版本(即使我清除了缓存内容 - 我猜这是因为缓存存储在其他地方,因为我正在覆盖 twig.options... 不是当然)。

但是,如果我放弃以下行:

'twig.options' => array('cache'=>'folder/twig')

...然后一切正常。

我怎样才能让两者发挥得很好?即保留缓存并添加自定义过滤器?

谢谢!

【问题讨论】:

    标签: php caching symfony twig silex


    【解决方案1】:

    您应该创建一个树枝扩展并在那里添加您的过滤器。

    #src/Insolis/Twig/InsolisExtension.php (snippet)
    <?php
    
    namespace Insolis\Twig;
    
    class InsolisExtension extends \Twig_Extension
    {
        public function getName() {
            return "insolis";
        }
    
        public function getFilters() {
            return array(
                "test"        => new \Twig_Filter_Method($this, "test"),
            );
        }
    
        public function test($input) {
            return "yay";
        }
    }
    

    如何注册:

    #app/bootstrap.php
    $app["twig"] = $app->share($app->extend("twig", function (\Twig_Environment $twig, Silex\Application $app) {
        $twig->addExtension(new Insolis\Twig\InsolisExtension($app));
    
        return $twig;
    }));
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 2012-02-13
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多