В нашем предыдущем проекте возврат представления непосредственно из запроса 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 в класс
Для рефакторинга мы создаем новый файл с именем Core/Session.php, содержащий класс Session, который управляет сеансами пользователей:
return redirect ('/login');
Используя этот класс сеанса, мы можем реализовать шаблон PRG и мигание сеанса для управления пользовательскими сеансами и предотвращения дублирования отправки форм и сохранения нежелательных сообщений об ошибках.
В этом файле метод has возвращает логическое значение, указывающее, существует ли ключ в сеансе:
return redirect ('/login');. публичная статическая функция has($key) { return (bool) static::get($key); }
В файле function.php мы реорганизуем функцию выхода из системы, чтобы использовать класс Session:
return redirect ('/login');Сессия::destroy();
Поскольку проект уже работает хорошо. Но нам нужно провести рефакторинг метода get в Core/Session.php, чтобы объединить код в один оператор:
return redirect ('/login');публичная статическая функция get($key, $default = null) { вернуть $_SESSION['_flash'][$key] ?? $_SESSION[$key] ?? $ по умолчанию; }
В нашем сегодняшнем проекте проведено много рефакторинга, чтобы сделать его лучше, сделать его более понятным и повысить производительность кода.
Надеюсь, вы это ясно поняли!.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3