Slimphp - Twig 动态包含
Slimphp - Twig dynamic include
我需要在 twig 模板中动态包含模板。因此模板将包含在 routes.php
中定义的页面
我尝试像下面的代码一样连接字符串和变量,但仍然无法正常工作。
routes.php:
$app->get('/home', function ($request, $response, $args) {
$data['page'] = "home";
return $this->view->render($response, 'Home/layout.html', $data);
});
Home/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);
});
Home/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 的模板文件名称的变量,而不是模板语法。
您正在访问错误的变量。您将以下内容传递给 twig
、
$data['page'] = "home";
return $this->view->render($response, 'Home/layout.html', $data);
这意味着要访问 twig
中的变量 page
你只需要调用 page
而不是 data.page
因为数组 data
不是甚至传递给你的模板
这意味着您的模板应如下所示
{% include 'Home/_header.html' %}
{% include 'Home/_topbar.html' %}
{% include 'Home/_sidebar.html' %}
{% include 'Home/' ~ page ~ '.html' %}
{% include 'Home/_footer.html' %}
其实你自己看报错信息就知道了
Unable to find template "Home/.html"
由于Home/
和.html
之间没有任何内容,这意味着变量data.page
不存在。我建议在开发时启用调试模式然后你会得到一个错误你试图访问一个未定义的变量
我需要在 twig 模板中动态包含模板。因此模板将包含在 routes.php
中定义的页面我尝试像下面的代码一样连接字符串和变量,但仍然无法正常工作。
routes.php:
$app->get('/home', function ($request, $response, $args) {
$data['page'] = "home";
return $this->view->render($response, 'Home/layout.html', $data);
});
Home/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);
});
Home/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 的模板文件名称的变量,而不是模板语法。
您正在访问错误的变量。您将以下内容传递给 twig
、
$data['page'] = "home";
return $this->view->render($response, 'Home/layout.html', $data);
这意味着要访问 twig
中的变量 page
你只需要调用 page
而不是 data.page
因为数组 data
不是甚至传递给你的模板
这意味着您的模板应如下所示
{% include 'Home/_header.html' %}
{% include 'Home/_topbar.html' %}
{% include 'Home/_sidebar.html' %}
{% include 'Home/' ~ page ~ '.html' %}
{% include 'Home/_footer.html' %}
其实你自己看报错信息就知道了
Unable to find template "Home/.html"
由于Home/
和.html
之间没有任何内容,这意味着变量data.page
不存在。我建议在开发时启用调试模式然后你会得到一个错误你试图访问一个未定义的变量