簡體   English   中英

使用Silex的枝條addFilter嗎?

[英]Twig addFilter using Silex?

使用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')

...然后一切正常。

我怎樣才能使兩個人打得更好? 即保留緩存並添加自定義過濾器?

謝謝!

您應該創建一個樹枝擴展名並在其中添加過濾器。

#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;
}));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM