"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Manejo de Sesiones con el patrón PRG y Flasheo

Manejo de Sesiones con el patrón PRG y Flasheo

Publicado el 2024-08-05
Navegar:311

Session Handling with the PRG pattern and Flashing

En nuestro proyecto anterior, devolver una vista directamente desde la solicitud POST cuando fallaba la validación no era el mejor enfoque.

El problema

Cuando un usuario envía un formulario de inicio de sesión con datos no válidos, el formulario muestra mensajes de error y redirige al usuario a la página de inicio de sesión. Sin embargo, si el usuario actualiza la página o sale y regresa a la página de inicio de sesión, persisten los mismos mensajes de error.

La solución

Para resolver este problema, podemos usar sesiones para almacenar errores e implementar el patrón PRG. Podemos almacenar errores en la variable superglobal $_SESSION y actualizar la declaración de errores en create.php como:

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


Pero incluso con este cambio, el problema persiste. Para solucionar esto tenemos que cambiar la declaración de devolución como:

return redirect ('/login');

retorno de redirección ('/iniciar sesión');



yo
Mueve al usuario a la página de inicio de sesión si se produce algún error, pero no muestra el error al usuario w
Luego flasheamos la variable superglobal $_SESSION para destruir la sesión después de un corto tiempo:

return redirect ('/login');

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

Ahora puedes notar que el problema está resuelto pero para refactorizar este código tenemos que agregar el método PRG en una clase

La clase de sesión (patrón PRG)


Para refactorizar, creamos un nuevo archivo llamado Core/Session.php que contiene una clase Session que administra las sesiones de los usuarios:

return redirect ('/login');

  • El método flash almacena datos en la matriz $_SESSION['_flash'], que se utiliza para flashear la sesión.
  • El método get verifica si hay datos actualizados en $_SESSION['_flash'] y los devuelve. De lo contrario, devuelve los datos de la sesión normal o el valor predeterminado.
  • El método unflash desactiva los datos flasheados, haciéndolos disponibles solo para la siguiente solicitud.
  • El patrón PRG se implementa almacenando datos en la sesión usando el método put, redirigiendo (por ejemplo, usando return redirección('/login');) y luego recuperando los datos en la siguiente solicitud usando el método get.

    Al usar esta clase de sesión, podemos implementar el patrón PRG y la actualización de sesiones para administrar las sesiones de los usuarios y evitar envíos de formularios duplicados y persistencia de mensajes de error no deseados.

    tiene método


    En este archivo, el método has devuelve un valor booleano que indica si existe una clave en la sesión:

    return redirect ('/login');
    
    
    . función estática pública tiene ($ clave) { return (bool) static::get($clave); }

    Refactorización de la función de cierre de sesión


    En el archivo function.php, refactorizamos la función de cierre de sesión para usar la clase Session:

    return redirect ('/login');
    
    
    Sesión::destruir();

    Refactorizando el método get


    Como el proyecto ya está funcionando bien. Pero necesitamos refactorizar el método get en Core/Session.php para consolidar el código en una sola declaración:

    return redirect ('/login');
    
    
    función estática pública get($clave, $predeterminado = nulo) { devolver $_SESSION['_flash'][$key] ?? $_SESSION[$clave] ?? $predeterminado; }

    Se realiza una gran cantidad de refactorización en nuestro proyecto de hoy para mejorar su apariencia, facilitar su comprensión y aumentar el rendimiento del código.

    ¡Espero que lo hayas entendido claramente!.

    Declaración de liberación Este artículo se reproduce en: https://dev.to/ghulam_mujtaba_247/session-handling-with-the-prg-pattern-and-flashing-1jog?1 Si hay alguna infracción, comuníquese con [email protected] para eliminar él
    Último tutorial Más>

    Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

    Copyright© 2022 湘ICP备2022001581号-3