Здравствуйте. Я довольно новичок в разработке с PHP и Twig и столкнулся с проблемой при обновлении глобальных переменных в twig. Хотя было бы неплохо иметь глобальную переменную flash / message, которую я мог бы отображать пользователю, если он ввел неправильный ввод (например, экран входа в систему).
В данный момент я использую сессию в php для этого флеш-сообщения. Когда флэш-сообщение обновляется, оно также должно обновляться в Twig. Но он не обновляется, пока я не перезагрузить страницу. В этот момент флэш-сообщение может быть изменено. Я думал, что проблема, возможно, была в PHP, поэтому я отобразил переменную flash в моем коде до того, как шаблон Twig был визуализирован, и переменная flash была обновлена в этом соответствующем операторе echo. Я хочу подчеркнуть, что Twig действительно обновляет флэш-сообщение, но это происходит только после повторной загрузки страницы. Так что у него никогда нет текущего флеш-сообщения.
Я написал короткую программу, чтобы продемонстрировать это. Если пользователь нажимает кнопку «один», то флэш-сообщение должно быть «сообщение один», а если он нажимает кнопку «два», то флэш-сообщение должно быть «сообщение два». Я включил как эхо флеш-сообщения в php, так и флеш-сообщение в шаблоне Twig.
index.php
<?php
session_start();
require_once '../PhotoBlog/utilities/twig/vendor/autoload.php';
$loader = new Twig_Loader_Filesystem('view');
$twig = new Twig_Environment($loader, array('cache' => false));
$twig->addGlobal('session', $_SESSION);
if (isset($_GET["test_one"])) {
$_SESSION["flash"] = "message one";
}else if(isset($_GET["test_two"])) {
$_SESSION["flash"] = "message two";
}
echo "PHP says: ".$_SESSION["flash"]."<br><br>";
echo $twig->render('index.html');
?>
index.html
<form action="index.php" method="GET">
<input type="submit" name="test_one" value="one">
<input type="submit" name="test_two" value="two">
</form>
<p>Twig says: {{ session.flash }}</p>
В идеале сообщения должны соответствовать друг другу, но сообщение Twig всегда печатает предыдущее сообщение.
Но Twig всегда будет выводить от второго до последнего представления. Я не могу думать об этом. Я просмотрел документы Twig и stackoverflow и не нашел никаких решений. Я отключил кеширование, так что, думаю, я исключил это, но, может быть, я что-то здесь упускаю.