Symfony提供了一个Twig网桥,可以在一些Symfony2组件和Twig之间提供额外的集成。将它作为依赖项添加到composer.json文件中。
我在composer.json
文件中包含以下内容:
{
"require": {
"silex/silex": "1.*",
"twig/twig": ">=1.8,<2.0-dev",
"symfony/twig-bridge": "2.3.*"
}
}
我像这样注册TwigServiceProvider()
:
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__ . '/views'
));
我正在尝试使用twig path()
方法:
<a href="{{ path('logout') }}">Log out</a>
我得到的错误如下:
Twig_Error_Syntax:函数“path”不存在
为什么我收到此错误?
app.url_generator.generate
而不是确保UrlGeneratorServiceProvider()
已注册:
$app->register(new UrlGeneratorServiceProvider());
为path()
创建一个新的twig函数:
$app['twig']->addFunction(new \Twig_SimpleFunction('path', function($url) use ($app) {
return $app['url_generator']->generate($url);
}));
我不应该这样做!! 如何才能正常 ?
答案 0 :(得分:14)
希望这对未来的观众有所帮助,因为很多人都没有回答这个问题,所以这里有一个。
确实需要UrlGeneratorServiceProvider()
注册
$app->register(new UrlGeneratorServiceProvider());
,正如umpirsky在评论中提到的那样,您需要通过作曲家安装symfony/twig-bridge
。
您无需添加自己的功能。在加载twig模板之前,您需要注册TwigServiceProvider()
和 UrlGeneratorServiceProvider()
。从文档中可以很容易地看出这一点。
答案 1 :(得分:0)
我也必须为path()
的twig创建一个新函数,但我对它进行了一些改进以处理可变数量的参数以允许在twig模板中传递数组:
$app['twig']->addFunction(new \Twig_SimpleFunction('path', function(...$url) use ($app) {
return call_user_func_array(array($app['url_generator'], 'generate'), $url);
}));
答案 2 :(得分:0)
四个简单步骤。
use Twig\Environment; use Twig\TwigFunction; use Twig\Loader\FilesystemLoader; $loader = new FilesystemLoader('/twig/templates'); $twig = new Environment($loader, []); $function = new TwigFunction('url', function () { return 'MyURL'; }); $twig -> addFunction($function);