我尝试将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本身也很好。
有什么想法吗?
答案 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环境,方法是扩展
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');
那应该解决它。