我需要在twig模板中动态包含模板。因此模板将包含在routes.php中定义的页面
我尝试连接字符串和变量,如下面的代码,但仍然无效。
routes.php文件:
$app->get('/home', function ($request, $response, $args) {
$data['page'] = "home";
return $this->view->render($response, 'Home/layout.html', $data);
});
主/的layout.html:
{% include 'Home/_header.html' %}
{% include 'Home/_topbar.html' %}
{% include 'Home/_sidebar.html' %}
{% include 'Home/' ~ data.page ~ '.html' %}
{% include 'Home/_footer.html' %}
错误讯息:
Unable to find template "Home/.html" (looked into: ../App/Templates) in "Home/layout.html" at line 4.
我找到了自己的解决方案,但这不是我想要的。所以我像这样编辑routes.php和layout.html:
routes.php文件:
$app->get('/home', function ($request, $response, $args) {
$data['page'] = "{% include 'Home/home.html' %}";
return $this->view->render($response, 'Home/layout.html', $data);
});
主/的layout.html:
{% include 'Home/_header.html' %}
{% include 'Home/_topbar.html' %}
{% include 'Home/_sidebar.html' %}
{% include template_from_string(page) %}
{% include 'Home/_footer.html' %}
我想要的是从routes.php发送包含模板文件名称的变量,而不是模板语法。
答案 0 :(得分:2)
您正在访问错误的变量。您将以下内容传递给twig
,
$data['page'] = "home";
return $this->view->render($response, 'Home/layout.html', $data);
这意味着要访问page
内的变量twig
,您只需要调用page
而不是data.page
,因为数组data
甚至没有通过走向你的模板
这意味着您的模板应如下所示
{% include 'Home/_header.html' %}
{% include 'Home/_topbar.html' %}
{% include 'Home/_sidebar.html' %}
{% include 'Home/' ~ page ~ '.html' %}
{% include 'Home/_footer.html' %}
在查看错误消息
时,您实际上可以自己说出来无法找到模板" Home / .html"
由于Home/
和.html
之间没有任何内容,这意味着变量data.page
不存在。我建议在开发时启用调试模式然后你会得到一个错误,你试图访问一个未定义的变量