在我们以前的项目中,直接从我们以前的项目中验证失败 post 要求返回视图并不是最好的方法。
问题当用户提交包含无效数据的登录表时,表单将显示错误信息,并将用户重新定位到登录页面。然而,如果用户刷新页面或导航离开并返回登录页面,同样的错误信息仍然存在。
解决方案为了解决这个问题,我们可以使用会话来存储错误并实现它 prg 模式。我们可以存储错误。 $_session 并将超全局变量 create.php 错误的句子更新为:
$_session['errors'] = $form->errors(); view('session/create.view.php', [ 'errors' => $_session['errors'] ?? [] ]);
但即使有这样的变化,问题仍然存在。为了解决这个问题,我们必须 return 句子变更为:
return redirect ('/login');
我
如果出现任何错误,它将将用户移动到登录页面,但不会向用户显示错误
然后我们刷新 $_session 超全局变量在短时间内销毁会话:
$_session['_flashed']['errors'] = $form->errors();
现在你可以注意到问题已经解决了,但是要重构这个代码,我们必须在类别中添加它 prg 方法
会话类(prg 模式)为了重建,我们创建了一个名字 core/session.php 包括管理用户对话的新文件 session 类:
<?php namespace core; class session { public static function has($key) { return (bool) static::get($key); } public static function put($key, $value) { $_session[$key] = $value; } public static function get($key, $default = null) { return $_session['_flash'][$key] ??? $_session[$key] ?? $default; } public static function flash($key, $value) { $_session['_flash'][$key] = $value; } public static function unflash() { unset($_session['_flash']); } public static function flush() { $_session = []; } public static function destroy() { static::flush(); session_destroy(); $params = session_get_cookie_params(); setcookie('phpsessid', '', time() - 3600, $params['path'], $params['domain'], $params['secure'], $params['httponly']); } }
通过使用这个session类,我们可以实现prg模式和会话闪烁来管理用户的会话,防止重复的表单提交和不必要的错误信息持续下去。
有方法在本文件中,has 方法返回布尔值,指示会话中是否有键:
. public static function has($key) { return (bool) static::get($key); }
在 function.php 在文件中,我们重建注销函数以使用它 session 类:
session::destroy();
由于项目运行良好,我们需要重建 core/session.php 中的 get 将代码合并到单个句子中的方法:
public static function get($key, $default = null) { return $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $default; }
为了使其外观更好,易于理解和提高代码性能,我们在今天的项目中进行了大量的重构。
我希望你能清楚地理解!.
以上就是使用 PRG 更多关于模式和闪烁会话处理的详细信息,请关注其他相关文章!
服务器:核心引擎,驱动数字化世界
使用 PRG 会话处理模式和闪烁-php教程
WPS操作受限:数据复制粘贴功能失效!
高效掌握:Windo服务器端口一览无余
通过扩展C,如何扩展C 实现特定业务逻辑的框架?-C
集成Golang框架和移动应用程序开发-Golang
强化服务,紧急增设端口监听,确保稳定运行!
通过扩展C,如何扩展C 实现特定业务逻辑的框架?-C
集成Golang框架和移动应用程序开发-Golang
哪种C 容器和无服务器架构最适合框架?-C
如何处理云原生环境中golang框架的安全问题?-Golang
云原生开发中golang框架与其他语言有什么区别?-Golang
在大型项目中,golang框架容易扩展和维护吗?-Golang
使用 Python 构建 Tic-Tac-Toe Python教程终端游戏
PHP 与其他语言框架相比:可扩展性-php教程
如何将Golang框架与Python集成?-Golang
C用于人工智能开发 框架与C 库-C
特定行业是否有最好的C Web开发框架?-C
Magic and Muscle:使用 Magic 和 DuckDB 进行 ETL,它包括我的举重训练数据-Python教程