es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Redirigir a una URL con un mensaje en Laravel Nova

Usé Laravel Breeze en Laravel Nova para generar el código base para registrar un usuario.

Cuando un usuario va a crear una cuenta, va a la ruta /register.

Todo el código de Breeze funciona.

Pero cuando se crea la cuenta, redirecciona a RouteServiceProvider::HOME.

class RegisteredUserController extends Controller
{
    public function store(Request $request)
    {
        $request->validate([
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'confirmed', Rules\Password::defaults()],
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
        ]);

        event(new Registered($user));

        $request->session()->flash('warning', 'You do not have permission to access that page.');

        return redirect(RouteServiceProvider::HOME);
    }
}

Cambió RouteServiceProvider::HOME para que coincida con /nova/login, pero no muestra ningún mensaje emergente, por lo que es confuso para el usuario.

Me gustaría enviar un mensaje diciendo lo básico: “te hemos enviado un correo de verificación, revisa tu bandeja de spam, etc.”

Intenté muchas opciones pero ninguna está funcionando.

Session::flash('message', 'El Mensaje');
$request->session()->flash('warning', 'El Mensaje');
return redirect(RouteServiceProvider::HOME)->with('status', '¡El Mensaje!');
redirect(RouteServiceProvider::HOME)->withErrors(['msg', 'El Mensaje']);

¿Cómo puedo hacer que aparezca el mensaje en verde?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para que aparezca el mensaje verde después de registrar un usuario y redirigir a la página /nova/login, puedes usar el método with() de Laravel para adjuntar el mensaje a la respuesta redirigida.

    Aquí tienes un ejemplo de cómo puedes modificar el método store() en el controlador RegisteredUserController para mostrar un mensaje de éxito:

    use Illuminate\Auth\Events\Registered;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Hash;
    use Illuminate\Support\Facades\Redirect;
    use Illuminate\Support\Facades\Session;
    use Illuminate\Validation\Rules;
    use Inertia\Inertia;
    use Laravel\Fortify\Contracts\CreatesNewUsers;
    use Laravel\Jetstream\HasTeams;
    use Laravel\Jetstream\Jetstream;
    use Laravel\Jetstream\RedirectsActions;
    use Laravel\Jetstream\Jetstream;
    use Laravel\Jetstream\TeamInvitation;
    use Laravel\Jetstream\TeamInvitationLink;
    
    class RegisteredUserController extends Controller
    {
        /**
         * Maneja una solicitud de registro entrante.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Laravel\Fortify\Contracts\CreatesNewUsers  $creator
         * @return \Illuminate\Http\RedirectResponse
         */
        public function store(Request $request, CreatesNewUsers $creator)
        {
            $request->validate([
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
                'password' => ['required', 'confirmed', Rules\Password::defaults()],
            ]);
    
            $user = $creator->create($request->all());
    
            event(new Registered($user));
    
            return $this->registered($request, $user)
                            ?: redirect($this->redirectPath())->with('success', 'Registro exitoso. Por favor, verifica tu email.');
        }
    
        /**
         * El usuario ha sido registrado.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  mixed  $user
         * @return mixed
         */
        protected function registered(Request $request, $user)
        {
            //
        }
    
        /**
         * Obtiene la ruta de redirección después de registrar/iniciar sesión.
         *
         * @return string
         */
        public function redirectPath()
        {
            if (method_exists($this, 'redirectTo')) {
                return $this->redirectTo();
            }
    
            return Jetstream::hasTeamFeatures()
                            ? route('teams.index')
                            : route('dashboard');
        }
    }
    

    En este ejemplo, estamos usando el método with() para adjuntar el mensaje 'success' a la respuesta redirigida:

    return $this->registered($request, $user)
                    ?: redirect($this->redirectPath())->with('success', 'Registro exitoso. Por favor, verifica tu email.');
    

    A continuación, puedes modificar las vistas de autenticación de Laravel Nova para mostrar el mensaje de éxito. En el archivo login.blade.php, puedes agregar el siguiente código para mostrar el mensaje:

    @if (session('success'))
        <div class="alert alert-success">
            {{ session('success') }}
        </div>
    @endif
    

    Asegúrate de colocar este código dentro de las directivas @section('content') y @endsection, así:

    @section('content')
        <div class="card shadow-lg">
            <div class="card-body">
                @if (session('success'))
                    <div class="alert alert-success">
                        {{ session('success') }}
                    </div>
                @endif
    
                <form method="POST" action="{{ route('login') }}">
                    @csrf
    
                    <div class="form-group">
                        <label for="email">{{ __('Dirección de email') }}</label>
                        <input id="email" type="email" class="form-control" name="email" value="{{ old('email') }}" required="" autofocus="">
                    </div>
    
                    <div class="form-group">
                        <label for="password">{{ __('Contraseña') }}</label>
                        <input id="password" type="password" class="form-control" name="password" required="" autocomplete="current-password">
                    </div>
    
                    <div class="form-group custom-control custom-checkbox">
                        <input type="checkbox" class="custom-control-input" name="remember" id="remember" {{="" old('remember')="" 'checked'="" :="" ''="" }}="">
                        <label class="custom-control-label" for="remember">{{ __('Recuérdame') }}</label>
                    </div>
    
                    <div class="form-group">
                        <button type="submit" class="btn btn-primary">{{ __('Iniciar sesión') }}</button>
                    </div>
                </form>
            </div>
        </div>
    @endsection
    

    Esto debería mostrar el mensaje de éxito después de que un usuario se registre y sea redirigido a la página /nova/login. Puedes modificar el mensaje según tus necesidades.

Comments are closed.