Silex中的Twig扩展

时间:2011-11-18 12:35:51

标签: twig silex

我尝试将Twig-extensions加载到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());
});

Pathes似乎是正确的,Twig本身也很好。

有什么想法吗?

3 个答案:

答案 0 :(得分:7)

在Silex 1.3中,您可以使用Pimple的 new extend方法:

$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
    $twig->addExtension(new \My\Twig\Extension\SomeExtension($app));
    return $twig;
}));

答案 1 :(得分:2)

在Silex 2.0中,首先是register the TwigServiceProvider

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

然后使用Twig Customization path

  

您可以在使用之前配置Twig环境,方法是扩展twig服务

Twig Extensions installation guide

$app->extend('twig', function($twig, $app) {
    $twig->addExtension(new Twig_Extensions_Extension_Text());
    return $twig;
});

答案 2 :(得分:1)

原因很简单。 PEAR-convention自动加载映射定义为“prefix”=> “路径”。您正在为树枝扩展设置“Twig_”前缀,然后注册树枝服务提供程序,它将覆盖它,指向树枝本身。

解决方案是使用“Twig_”以外的前缀,最好使用更具体的内容。像“Twig_Extensions _”这样的东西。

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

那应该解决它。