使用 PRG 会话处理模式和闪烁-php教程

首页 2024-07-12 10:43:30

在我们以前的项目中,直接从我们以前的项目中验证失败 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']);
    }
}
  1. flash 存储数据的方法 $_session['_flash'] 用于会话刷新的数组。
  2. get 方法检查 $_session['_flash'] 中是否有 flash 并返回数据。如果没有,则返回常规会话数据或默认值。
  3. unflash 该方法取消了设置闪烁的数据,使其仅用于下一个请求。
  4. prg 实现模式的方法是使用 put 该方法在会话中存储数据,重定向(例如使用) return redirect('/login');),然后使用 get 该方法在下一个请求中检索数据。

通过使用这个session类,我们可以实现prg模式和会话闪烁来管理用户的会话,防止重复的表单提交和不必要的错误信息持续下去。

有方法

在本文件中,has 方法返回布尔值,指示会话中是否有键:

. 

public static function has($key) {
    return (bool) static::get($key);
}
重建注销功能

在 function.php 在文件中,我们重建注销函数以使用它 session 类:

session::destroy();
重构 get 方法

由于项目运行良好,我们需要重建 core/session.php 中的 get 将代码合并到单个句子中的方法:

public static function get($key, $default = null) {
    return $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $default;
}

为了使其外观更好,易于理解和提高代码性能,我们在今天的项目中进行了大量的重构。

我希望你能清楚地理解!.

以上就是使用 PRG 更多关于模式和闪烁会话处理的详细信息,请关注其他相关文章!


p