我在家庭环境中工作,但不是我的工作。所有更改都推送到git所以我有相同的源代码。 Composer更新在composer.json文件上运行,因此依赖项也应该相同。
我的services.php文件包含TwigServiceProvider,SessionServiceProvider和UrlGeneratorServiceProvider。
我的composer.json文件包含:
"require": {
"silex/silex": "~1.2",
"twig/twig": ">=1.8,<2.0-dev",
"doctrine/dbal": "~2.3",
"symfony/security": "2.6.*",
"symfony/translation": "~2.6",
"symfony/config": "~2.6",
"symfony/yaml": "~2.6",
"symfony/twig-bridge": "2.3.*",
"ircmaxell/password-compat": "~1.0.3"
}
导致错误的base.html.twig包含:
<body>
{% include "./partials/top_bar.html" %}
{{ render(path('sidebar')) }} <!-- THIS APPEARS TO BE THE PROBLEM -->
<!-- Main Wrapper -->
<div id="wrapper">
{% block content %}{% endblock content %}
</div>
{% include "./partials/scripts.html" %}
{% block additional_scripts %}{% endblock additional_scripts %}
</body>
我有一个已注册的路由(YamlLoader并已将控制器添加为服务),如下所示:
### component routes
sidebar:
path : /admin/sidebar
defaults : { _controller: 'controller.includes.sidebar:action', _locale: 'en' }
我希望这对你们来说是足够的信息。我已经环顾四周,但我找不到有用的东西:(如果你去旅行,路线本身就有效,所以我几乎可以肯定路线是正确的,这让我相信它可能与包版本或缺少包有关。
答案 0 :(得分:0)
可能你得到这条消息,因为它确实不存在?我没有看到你注册这个函数的任何代码行。 Twig有一组预先定义的functions。 render()
不属于他们,因此您首先需要extend twig。
延长树枝(功能)
$twig = new Twig_Environment($loader);
$function = new Twig_SimpleFunction('function_name', function () {
// ...
});
$twig->addFunction($function);
或者既然你提到你正在使用Silex:
扩展Twig服务提供商(功能)
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__.'/views',
));
$app['twig'] = $app->share($app->extend('twig', function($twig, $app) {
$function = new Twig_SimpleFunction('function_name', function () {
// ...
});
$twig->addFunction($function);
return $twig;
}));
因为看起来你真的想渲染一个特定的树枝模板,我认为有一个误解。您可以在PHP中使用 render()来呈现某个参数为数组的模板。
echo $template->render(array());
在枝条内渲染模板只需要包含它即可。
{% include 'template.html' with vars %}