"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Manipulação de Sessão com o Padrão PRG e Flashing

Manipulação de Sessão com o Padrão PRG e Flashing

Publicado em 2024-08-05
Navegar:757

Session Handling with the PRG pattern and Flashing

Em nosso projeto anterior, retornar uma visualização diretamente da solicitação POST quando a validação falhou não era a melhor abordagem.

O problema

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.

A soluçã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

A classe de sessão (padrão PRG)


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');

  • O método flash armazena dados no array $_SESSION['_flash'], que é usado para flashing de sessão.
  • O método get verifica se há dados atualizados em $_SESSION['_flash'] e os retorna. Caso contrário, ele retorna os dados regulares da sessão ou o valor padrão.
  • O método unflash desativa os dados atualizados, tornando-os disponíveis apenas para a próxima solicitação.
  • O padrão PRG é implementado armazenando dados na sessão usando o método put, redirecionando (por exemplo, usando return redirect('/login');) e, em seguida, recuperando os dados na próxima solicitação usando o método get.

    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.

    tem método


    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); }

    Refatorando a função de logout


    No arquivo function.php, refatoramos a função logout para usar a classe Session:

    return redirect ('/login');
    
    
    Sessão::destruir();

    Refatorando o método get


    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!.

    Declaração de lançamento Este artigo é reimpresso em: https://dev.to/ghulam_mujtaba_247/session-handling-with-the-prg-pattern-and-flashash-1JOG?1 Se houver alguma infração, entre em contato isto.
    Tutorial mais recente Mais>

    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