【发布时间】:2019-01-08 02:39:42
【问题描述】:
您好,我是使用 PHP 和 Twig 开发的新手,在更新 twig 中的全局变量时遇到了问题。我认为如果用户输入了错误的输入(例如登录屏幕),我可以向用户显示一个闪存/错误消息全局变量会很好。
目前我正在使用 php 中的会话来获取此 Flash 消息。当 flash 消息更新时,它也应该在 Twig 中更新。但在我重新加载页面之前它不会更新。此时,可能会更改闪存消息。我认为问题可能出在 PHP 中,因此在呈现 Twig 模板之前,我在代码中回显了 flash 变量,并在相应的 echo 语句中更新了 flash 变量。我想强调的是,Twig 确实会更新 flash 消息,但直到页面再次加载后才会更新。所以它永远不会有当前的 flash 消息。
我编写了一个简短的程序来演示这一点。如果用户按下按钮“一”,则闪存消息应该是“消息一”,如果他们按下按钮“二”,则闪存消息应该是“消息二”。我在 php 中包含了 flash 消息的 echo 和 Twig 模板中的 flash 消息。
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 并没有找到任何解决方案。我关闭了缓存,所以我想我已经排除了这种可能性,但也许我在这里遗漏了一些东西。
【问题讨论】: