根据Silex文档:
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 SilexProviderTwigServiceProvider(), array(
'twig.path' => __DIR__ . '/views'
));
我正在尝试使用树枝path()
方法,如下所示:
<a href="{{ path('logout') }}">Log out</a>
我得到的错误如下:
Twig_Error_Syntax:"路径"函数不存在
为什么我会收到此错误?
- 我尝试切换版本以检查它是否是版本问题
- 一条谷歌群组评论建议"注册"树枝桥提供商,但这并不存在
- 我不想使用:
app.url_generator.generate
我所有的模板
我找到的临时解决方案:
确保UrlGeneratorServiceProvider()
已注册:
$app->register(new UrlGeneratorServiceProvider());
为树枝创建一个新函数path()
:
$app['twig']->addFunction(new Twig_SimpleFunction('path', function($url) use ($app) {
return $app['url_generator']->generate($url);
}));
我不应该这样做!!我怎样才能让它正常工作?
希望这将对未来的观众有所帮助,因为许多人在没有可靠答案的情况下发布了这个问题,所以这里有一个。
从字面上看,您需要UrlGeneratorServiceProvider()
注册
$app->register(new UrlGeneratorServiceProvider());
此外,正如裁判员在评论中提到的,您需要通过作曲家安装symfony/twig-bridge
。
您无需添加自己的函数。在加载树枝模板之前,您需要注册TwigServiceProvider()
和UrlGeneratorServiceProvider()
。这在文档中并不容易看出。
我也不得不为 twig 创建一个新函数,用于path()
,但我对其进行了一些改进以处理可变数量的参数以允许在 twig 模板中传递数组:
$app['twig']->addFunction(new Twig_SimpleFunction('path', function(...$url) use ($app) {
return call_user_func_array(array($app['url_generator'], 'generate'), $url);
}));
四个简单的步骤。
- 创建加载程序
- 创建树枝对象。
- 创建自定义函数
- 添加到树枝对象。
使用树枝\环境; 使用树枝\树枝功能; 使用 Twig\Loader\FilesystemLoader; $loader = new FilesystemLoader('/twig/templates'(; $twig = 新环境($loader, [](; $function = new TwigFunction('url', function (( { return 'MyURL'; }(; $twig -> addFunction($function(;