7

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

...その後、すべてが機能します。

どうすれば2つをうまくプレイさせることができますか?つまり、キャッシュを保持し、カスタムフィルターを追加しますか?

ありがとう!

4

1 に答える 1

20

小枝拡張機能を作成し、そこにフィルターを追加する必要があります。

#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;
}));
于 2012-02-29T21:19:52.740 に答える