Twig_Error_Syntax,函数'渲染'在base.html.twig'中不存在

时间:2015-07-16 09:22:30

标签: routing syntax-error twig silex

我在家庭环境中工作,但不是我的工作。所有更改都推送到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' }

我希望这对你们来说是足够的信息。我已经环顾四周,但我找不到有用的东西:(如果你去旅行,路线本身就有效,所以我几乎可以肯定路线是正确的,这让我相信它可能与包版本或缺少包有关。

1 个答案:

答案 0 :(得分:0)

可能你得到这条消息,因为它确实不存在?我没有看到你注册这个函数的任何代码行。 Twig有一组预先定义的functionsrender()不属于他们,因此您首先需要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 %}