是否可以实现一个可以显示一个或其他 Twig 模板的 index.php 文件?
Is it possible to implement an index.php file that can show one or other Twig template?
假设我们必须管理用户登录和注销。
我们有一个 index.php 文件,默认显示 index.twig 模板(其中包含 header 以允许用户登录或注册。
我们还有另一个类似于 index.twig 模板的 Twig 模板 (welcome.twig),但是它的 header 显示了对用户配置文件的访问权限、注销选项以及我们的用户可以执行的操作在网站上。
我想知道 index.php 文件是否可以通过条件显示这两个模板之一。
在我的 index.php 文件中我有这个:
if (!isset($_SESSION['account'])){
$twig->display("index.twig");
}else{
$twig->display("welcome.twig");
}
如您所知,我要在 $_SESSION 变量中未设置帐户时显示 index.twig(默认模板),并在 $_SESSION 中设置帐户时显示 welcome.twig变量。
在 $_SESSION 变量上设置的帐户出现在另一个名为 login.php
的文件中
目前,我一直在使用第二个文件 (welcome.php) 来获取我想要的内容,但我不确定这是获取它的好方法...
谢谢。
您应该在模板上使用条件继承。看看这个答案:
Twig extend template on condition
您可以将变量传递给模板,如下所示:
$twig->display("index.twig", array('logged' => isset($_SESSION['account'])));
然后,使用该变量在模板中执行条件。它可以继承自两个模板,每个模板都有不同的菜单,具体取决于用户是否登录。
希望对您有所帮助。
我遇到了这个解决方案:
我在 index.php 文件中为 $_SESSION 变量设置了一个值
<?php
require_once '../vendor/autoload.php';
require_once '../generated-conf/config.php';
require_once '../vendor/twig/twig/lib/Twig/Autoloader.php';
session_start(); // Session always starts when index.php is loaded (even if it is loaded for the first time)
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('templates/');
$twig = new Twig_Environment($loader);
// Condition to show any or other template
if (isset($_SESSION['online']) && ($_SESSION['online'] == true)){
$args= array('online' => true, 'session' => $_SESSION);
}else{
$args= array('online' => false);
}
// Display Twig template
$twig->display("index.twig", $args);
?>
在我的 Twig 模板中 (index.twig):
{% if online == true %} {# It's not the $_SESSION variable 'online' value, but the 'online' value of the 'args' array #}
{% include 'userMenu.twig' %}
{% else %}
{% include 'defaultMenu.twig' %}
{% endif %}
这让它起作用了:)
希望对大家有所帮助。
假设我们必须管理用户登录和注销。
我们有一个 index.php 文件,默认显示 index.twig 模板(其中包含 header 以允许用户登录或注册。
我们还有另一个类似于 index.twig 模板的 Twig 模板 (welcome.twig),但是它的 header 显示了对用户配置文件的访问权限、注销选项以及我们的用户可以执行的操作在网站上。
我想知道 index.php 文件是否可以通过条件显示这两个模板之一。
在我的 index.php 文件中我有这个:
if (!isset($_SESSION['account'])){
$twig->display("index.twig");
}else{
$twig->display("welcome.twig");
}
如您所知,我要在 $_SESSION 变量中未设置帐户时显示 index.twig(默认模板),并在 $_SESSION 中设置帐户时显示 welcome.twig变量。
在 $_SESSION 变量上设置的帐户出现在另一个名为 login.php
的文件中目前,我一直在使用第二个文件 (welcome.php) 来获取我想要的内容,但我不确定这是获取它的好方法...
谢谢。
您应该在模板上使用条件继承。看看这个答案:
Twig extend template on condition
您可以将变量传递给模板,如下所示:
$twig->display("index.twig", array('logged' => isset($_SESSION['account'])));
然后,使用该变量在模板中执行条件。它可以继承自两个模板,每个模板都有不同的菜单,具体取决于用户是否登录。
希望对您有所帮助。
我遇到了这个解决方案:
我在 index.php 文件中为 $_SESSION 变量设置了一个值
<?php
require_once '../vendor/autoload.php';
require_once '../generated-conf/config.php';
require_once '../vendor/twig/twig/lib/Twig/Autoloader.php';
session_start(); // Session always starts when index.php is loaded (even if it is loaded for the first time)
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('templates/');
$twig = new Twig_Environment($loader);
// Condition to show any or other template
if (isset($_SESSION['online']) && ($_SESSION['online'] == true)){
$args= array('online' => true, 'session' => $_SESSION);
}else{
$args= array('online' => false);
}
// Display Twig template
$twig->display("index.twig", $args);
?>
在我的 Twig 模板中 (index.twig):
{% if online == true %} {# It's not the $_SESSION variable 'online' value, but the 'online' value of the 'args' array #}
{% include 'userMenu.twig' %}
{% else %}
{% include 'defaultMenu.twig' %}
{% endif %}
这让它起作用了:)
希望对大家有所帮助。