Dominar la persistencia en los formularios en Laravel con métodos Flash

  • Publicado el 11 noviembre, 2024
  • Palabras: 273

Al crear aplicaciones web, es común que se mantenga la información ingresada en los formularios en las distintas solicitudes, especialmente cuando se trata de errores de validación o formularios de varios pasos. Laravel ofrece un conjunto de métodos "flash" poderosos en el objeto Request para que esta tarea sea sencilla. Veamos cómo se pueden usar flash(), flashOnly() y flashExcept() para mejorar la experiencia del usuario en las aplicaciones de Laravel.

Dominar la persistencia en los formularios en Laravel con métodos Flash

#Comprender los métodos flash

Laravel ofrece tres métodos principales para mostrar datos de entrada en la sesión:

  • flash(): muestra toda la entrada actual en la sesión.
  • flashOnly(): muestra solo los campos de entrada especificados en la sesión.
  • flashExcept(): muestra toda la entrada en la sesión excepto los campos especificados.

#Uso de flash()

El método flash() es la forma más sencilla de conservar todas las entradas:

 

$request->flash();

 

Esto hará que todos los datos de entrada estén disponibles en la próxima solicitud a través de la función auxiliar old().

 

#Uso de flashOnly()

Cuando desee conservar solo campos específicos, utilice flashOnly():

 

$request->flashOnly(['username', 'email']);

 

Esto es útil cuando desea ser explícito acerca de qué campos deben conservarse.

 

#Uso de flashExcept()

Para conservar todas las entradas excepto ciertos campos (como contraseñas), use flashExcept():

 

$request->flashExcept('password');

 

Esto garantiza que la información confidencial no persista en la sesión.

 

#Ejemplo práctico

Consideremos un escenario en el que estamos manejando un formulario de registro de usuario con validación. Queremos conservar la entrada si falla la validación, pero no queremos mostrar el campo de contraseña por razones de seguridad.

A continuación, se muestra cómo podríamos implementar esto en un controlador:

 

<?php

namespace AppHttpControllers;

use AppModelsUser;
use IlluminateHttpRequest;
use IlluminateSupportFacadesHash;

class RegistrationController extends Controller
{
    public function register(Request $request)
    {
        $validated = $request->validate([
            'name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:8|confirmed',
        ]);

        if ($validated) {
            $user = User::create([
                'name' => $validated['name'],
                'email' => $validated['email'],
                'password' => Hash::make($validated['password']),
            ]);

            auth()->login($user);

            return redirect()->route('dashboard');
        }

        // Si llegamos aquí, la validación ha fallado.
        $request->flashExcept('password');
        return back()->withErrors($validated);
    }
}

 

En este ejemplo, si falla la validación, usamos flashExcept() para conservar todos los datos ingresados, excepto el campo de contraseña, antes de redirigir nuevamente al formulario.

En la plantilla Blade, puedes usar el asistente old() para volver a completar el formulario:

 

<form method="POST" action="{{ route('register') }}">
    @csrf
    <input type="text" name="name" value="{{ old('name') }}" required autofocus>
    <input type="email" name="email" value="{{ old('email') }}" required>
    <input type="password" name="password" required>
    <input type="password" name="password_confirmation" required>
    <button type="submit">Register</button>
</form>

 

Si domina los métodos flash de Laravel, podrá crear formularios más fáciles de usar que conserven la información ingresada en las solicitudes y mantengan la seguridad. Estos métodos son particularmente útiles para formularios complejos, procesos de varios pasos o cualquier situación en la que desee mejorar la experiencia del usuario al no requerir que los usuarios vuelvan a ingresar información innecesariamente.

Antonio Jenaro
Antonio Jenaro

Web Developer

Archivado en:

Fuente: Harris Raftopoulos

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión