假设我们必须管理用户登录和注销。
我们有一个index.php文件,默认显示index.twig模板(包含允许用户登录或注册的标题。
我们有另一个类似于index.twig模板的Twig模板(welcome.twig)但是,它的标题显示了对用户配置文件,注销选项以及用户可以在网站上执行的操作的访问。
我想知道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)来获得我想要的东西,但我不确定这是获得它的好方法......
感谢。
答案 0 :(得分:2)
您应该在模板上使用条件继承。看看这个答案:
Twig extend template on condition
您可以将变量传递给模板,如下所示:
$twig->display("index.twig", array('logged' => isset($_SESSION['account'])));
然后,使用该变量在模板中执行条件。它可以从两个模板继承,每个模板都有不同的菜单,具体取决于用户是否已登录。
我希望它有所帮助。
答案 1 :(得分:0)
我遇到了这个解决方案:
我在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 %}
使它成功:)
我希望它有所帮助。