3

Twig 拡張機能を Silex にロードしようとしましたが、次のようになりました。

「Twig_Extensions_Extension_Text」が見つかりません

最初に Twig-Extensions をオートローダーに登録します。

$app['autoloader']->registerPrefixes(array( 'Twig_'  => array(__DIR__.'/../vendor/Twig-extensions/fabpot/lib')));

次に、Twig を登録します。

$app->register(new Silex\Provider\TwigServiceProvider(), array(
        'twig.path' => __DIR__ . '/../views',
         'twig.class_path' => __DIR__ . '/../vendor/twig/lib',
));

拡張機能を追加します。

$oldTwigConfiguration = isset($app['twig.configure']) ? $app['twig.configure']: function(){};
$app['twig.configure'] = $app->protect(function($twig) use ($oldTwigConfiguration) {
    $oldTwigConfiguration($twig);
    $twig->addExtension(new Twig_Extensions_Extension_Text());
});

パスは正しいようで、Twig 自体は正常に動作します。

何か案が?

4

3 に答える 3

7

Silex 1.3 では、Pimple の新しい extendメソッドを使用できます。

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
    $twig->addExtension(new \My\Twig\Extension\SomeExtension($app));
    return $twig;
}));
于 2012-08-23T15:46:23.970 に答える
2

Silex 2.0 では、最初に TwigServiceProvider を登録します

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => __DIR__.'/views',
));

次に、Twig カスタマイズ パスを使用します

twigサービスを拡張することで、使用する前にTwig環境を構成できます

およびTwig 拡張機能のインストール ガイド:

$app->extend('twig', function($twig, $app) {
    $twig->addExtension(new Twig_Extensions_Extension_Text());
    return $twig;
});
于 2016-12-22T20:17:57.287 に答える
1

理由は簡単です。PEAR 規約の autoload マッピングは、"prefix" => "path" として定義されます。小枝拡張機能の「Twig_」プレフィックスを設定してから、それをオーバーライドして小枝自体を指す小枝サービス プロバイダを登録します。

解決策は、「Twig_」以外の接頭辞、できればより具体的なものを使用することです。「Twig_Extensions_」のようなもの。

$app['autoloader']->registerPrefix('Twig_Extensions_', __DIR__.'/../vendor/twig-extensions/lib');

それはそれを修正する必要があります。

于 2011-11-20T00:13:45.633 に答える