Скажем, нам нужно управлять входом пользователя и выходом из системы.
У нас есть файл index.php, который по умолчанию показывает шаблон index.twig (который содержит заголовок, позволяющий пользователям входить в систему или регистрироваться.
И у нас есть еще один шаблон Twig (welcome.twig), похожий на шаблон index.twig, но его заголовок показывает доступ к профилю пользователя, опции выхода и действия, которые наш пользователь может делать на веб-сайте.
Я хотел бы знать, может ли файл index.php показать один из обоих этих шаблонов условным.
В моем файле index.php у меня есть это:
if (!isset($_SESSION['account'])){
$twig->display("index.twig");
}else{
$twig->display("welcome.twig");
}
Как вы, возможно, знаете, я предлагаю показать index.twig (шаблон по умолчанию), когда учетная запись НЕ установлена в переменной $ _SESSION, и показать welcome.twig, когда учетная запись установлена в переменной $ _SESSION.
Учетная запись в переменной $ _SESSION встречается в другом файле login.php
На данный момент я использую второй файл (welcome.php), чтобы получить то, что хочу, но я не уверен, что это хороший способ получить его...
Благодарю.
Я столкнулся с этим решением:
Я установил значение переменной $ _SESSION в файле index.php
<?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 not the $_SESSION variable 'online' value, but the 'online' value of the 'args' array #}
{% include 'userMenu.twig' %}
{% else %}
{% include 'defaultMenu.twig' %}
{% endif %}
Это заставляет его работать :)
Надеюсь, это поможет кому-то.
Вы должны использовать условное наследование в своем шаблоне. Посмотрите на этот ответ:
Twig расширяют шаблон при условии
Вы можете передать переменную в шаблон, например:
$twig->display("index.twig", array('logged' => isset($_SESSION['account'])));
И тогда сделайте условие в шаблоне с этой переменной. Он может наследовать от двух шаблонов, каждый из которых имеет другое меню, в зависимости от того, зарегистрирован ли пользователь или нет.
Я надеюсь, что это помогает.