我试图模仿本机PHP中的flash消息的行为,以便一次性显示错误消息。
显示登录页面:
public function showLoginAndRegistrationPage()
{
$session = new Session();
$data['errors']['login']['account'] = $session->getFormErrorFlashData('login', 'account');
$this->viewPresenter->display('basic', 'customer/login-registration', $data, 'Login/Register');
}
验证登录详细信息:
public function processLogin()
{
// Some code
$session = new Session();
if($this->formInputFilter->isValid()) {
// Some code
if(true) {
// Some code
} else {
$errors = array(
'account' => 'Account does not exist.'
);
$session->setFormErrorFlashData('login', $errors);
header('Location: /login');
}
} else {
header('Location: /login');
}
}
用于设置错误消息:
public function setFormErrorFlashData($form, $errors = array())
{
foreach($errors As $field => $message) {
$_SESSION['errors']["{$form}"]["{$field}"] = $message;
}
}
用于获取存储在会话中的错误消息:
public function getFormErrorFlashData($form, $field)
{
if(isset($_SESSION['errors']["{$form}"]["{$field}"])) {
$message = $_SESSION['errors']["{$form}"]["{$field}"];
unset($_SESSION['errors']["{$form}"]["{$field}"]);
return $message;
}
}
基本上对于无效的尝试,在重定向之后,它现在应该显示“帐户不存在”消息,然后当用户刷新页面时,它应该不再存在。
当我注释 unset()
中的getFormErrorFlashData()
行,$_SESSION
包含错误时,会发生什么情况,但当然正如预期的那样,它们确实会持续存在无数页翻新后。
但当 未注明时,我会得到一个NULL
。即使尝试在其中存储该会话密钥的值,$message
似乎也未设置。
我有一个包含session_start()
行的引导程序文件,每个页面都加载了它,所以我怀疑这是什么原因?
更新
index.php(引导程序文件)
<?php
session_start();
date_default_timezone_set('Asia/Taipei');
require_once 'core/Autoloader.php';
use core\Autoloader As Autoloader;
use core\Router As Router;
use core\Dispatcher As Dispatcher;
spl_autoload_register('core\Autoloader::loadClass');
$request_uri = trim($_SERVER['REQUEST_URI']);
$router = new Router();
$route = $router->handleRequest($request_uri);
if (!$route) {
require_once ('./views/errors/404.php');
} else {
$dispatcher = new Dispatcher($route);
$isDispatched = $dispatcher->dispatch();
if (!$isDispatched) {
echo '<div>' .$route['class'] .'/' . $route['action'] . ' not found </div>';
require_once ('./views/errors/404.php');
}
}
答案 0 :(得分:0)
我找到了罪魁祸首。
当我跟踪请求日志时,showLoginAndRegistrationPage()
被调用了两次,因为我没有意识到我在html文件中附加了一个.js
文件并带有submit
个事件被解雇的处理程序,因此双页请求。
我删除了该文件,现在它正在运行。
感谢您的帮助!