«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Обработка сеанса с помощью шаблона PRG и перепрошивки

Обработка сеанса с помощью шаблона PRG и перепрошивки

Опубликовано 5 августа 2024 г.
Просматривать:905

Session Handling with the PRG pattern and Flashing

В нашем предыдущем проекте возврат представления непосредственно из запроса POST при неудачной проверке был не лучшим подходом.

Проблема

Когда пользователь отправляет форму входа с недействительными данными, форма отображает сообщения об ошибках и перенаправляет пользователя на страницу входа. Однако если пользователь обновит страницу или уйдет и вернется на страницу входа в систему, те же сообщения об ошибках сохранятся.

Решение

Чтобы решить эту проблему, мы можем использовать сеансы для хранения ошибок и реализации шаблона PRG. Мы можем хранить ошибки в суперглобальной переменной $_SESSION и обновлять оператор ошибок в create.php следующим образом:

$_SESSION['errors'] = $form->errors();
view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);
?? [] ]);


Но даже несмотря на это изменение, проблема все еще сохраняется. Чтобы решить эту проблему, нам нужно изменить оператор возврата следующим образом:

return redirect ('/login');

вернуть перенаправление ('/login');



л
Он перемещает пользователя на страницу входа в систему, если произошла какая-либо ошибка, но не показывает ошибку пользователю w
Затем мы записываем суперглобальную переменную $_SESSION, чтобы через короткое время уничтожить сеанс:

return redirect ('/login');

$_SESSION['_flashed']['errors'] = $form->errors();

Теперь вы можете заметить, что проблема решена, но для рефакторинга этого кода нам нужно добавить метод PRG в класс

Класс сеанса (шаблон PRG)


Для рефакторинга мы создаем новый файл с именем Core/Session.php, содержащий класс Session, который управляет сеансами пользователей:

return redirect ('/login');

  • Метод flash сохраняет данные в массиве $_SESSION['_flash'], который используется для прошивки сеанса.
  • Метод get проверяет, есть ли записанные данные в $_SESSION['_flash'] и возвращает их. Если нет, он возвращает обычные данные сеанса или значение по умолчанию.
  • Метод unflash сбрасывает записанные данные, делая их доступными только для следующего запроса.
  • Шаблон PRG реализуется путем хранения данных в сеансе с использованием метода put, перенаправления (например, с использованием return redirect('/login');), а затем получения данных в следующем запросе с использованием метода get.

    Используя этот класс сеанса, мы можем реализовать шаблон PRG и мигание сеанса для управления пользовательскими сеансами и предотвращения дублирования отправки форм и сохранения нежелательных сообщений об ошибках.

    имеет метод


    В этом файле метод has возвращает логическое значение, указывающее, существует ли ключ в сеансе:

    return redirect ('/login');
    
    
    . публичная статическая функция has($key) { return (bool) static::get($key); }

    Рефакторинг функции выхода из системы


    В файле function.php мы реорганизуем функцию выхода из системы, чтобы использовать класс Session:

    return redirect ('/login');
    
    
    Сессия::destroy();

    Рефакторинг метода get


    Поскольку проект уже работает хорошо. Но нам нужно провести рефакторинг метода get в Core/Session.php, чтобы объединить код в один оператор:

    return redirect ('/login');
    
    
    публичная статическая функция get($key, $default = null) { вернуть $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $ по умолчанию; }

    В нашем сегодняшнем проекте проведено много рефакторинга, чтобы сделать его лучше, сделать его более понятным и повысить производительность кода.

    Надеюсь, вы это ясно поняли!.

    Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/ghulam_mujtaba_247/session-handling-with-the-prg-pattern-and-flashing-1jog?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить это
    Последний учебник Более>

    Изучайте китайский

    Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

    Copyright© 2022 湘ICP备2022001581号-3