Em nosso projeto anterior, retornar uma visualização diretamente da solicitação POST quando a validação falhou não era a melhor abordagem.
Quando um usuário envia um formulário de login com dados inválidos, o formulário exibe mensagens de erro e redireciona o usuário para a página de login. No entanto, se o usuário atualizar a página ou sair e retornar à página de login, as mesmas mensagens de erro persistirão.
Para resolver esse problema, podemos usar sessões para armazenar erros e implementar o padrão PRG. Podemos armazenar erros na variável superglobal $_SESSION e atualizar a declaração de erros em create.php como:
$_SESSION['errors'] = $form->errors(); view('session/create.view.php', [ 'errors' => $_SESSION['errors'] ?? [] ]);?? [] ]);
Mas mesmo com essa mudança, o problema ainda persiste. Para resolver isso, temos que alterar a instrução return como:
return redirect ('/login');redirecionamento de retorno ('/login');
eu
Ele move o usuário para a página de login se ocorrer algum erro, mas não mostra o erro ao usuário w
Em seguida, atualizamos a variável superglobal $_SESSION para destruir a sessão após um curto período de tempo:
return redirect ('/login');$_SESSION['_flashed']['errors'] = $form->errors();
Agora você pode notar que o problema está resolvido mas para refatorar este código temos que adicionar o método PRG em uma classe
Para refatoração, criamos um novo arquivo chamado Core/Session.php contendo uma classe Session que gerencia as sessões do usuário:
return redirect ('/login');
Ao usar esta classe Session, podemos implementar o padrão PRG e flashing de sessão para gerenciar sessões de usuários e evitar envios duplicados de formulários e persistência de mensagens de erro indesejadas.
Neste arquivo, o método has retorna um valor booleano indicando se existe uma chave na sessão:
return redirect ('/login');. função estática pública tem($chave) { return (bool) static::get($key); }
No arquivo function.php, refatoramos a função logout para usar a classe Session:
return redirect ('/login');Sessão::destruir();
Como o projeto já está funcionando bem. Mas precisamos refatorar o método get em Core/Session.php para consolidar o código em uma única instrução:
return redirect ('/login');função estática pública get($key, $default = null) { retornar $_SESSION['_flash'][$key] ?? $_SESSION[$chave] ?? $padrão; }
Muita refatoração é feita em nosso projeto atual para torná-lo melhor, fácil de entender e aumentar o desempenho do código.
Espero que você tenha entendido claramente!.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3