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.

Laravel: Cómo utilizar un parámetro distinto al id de usuario en una URL

Estoy creando un sitio web de Laravel donde los usuarios pueden iniciar sesión y subir imágenes. Para que los visitantes vean la galería de ese usuario, he configurado una página de galería con una URL como https://localhost8000/gallery/2, donde 2 es el ID de usuario.

Mi código actual se ve así.

web.php

Route::get('/menu/{user}', 'CartController@menu');

CartController.php

public function menu($user)
{
    $user = User::findOrFail($user);
    return view('new_menu')->with(['user' => $user]);
}

En lugar de usar el ID de usuario como parámetro de ruta, quiero usar una cadena aleatoria. Actualmente, cuando el usuario se registra, se crea una cadena aleatoria de 32 dígitos que se almacena en la tabla users en una columna llamada random.

No pude averiguar cómo relacionar “random” con “user” en web.php y Controller.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para usar una cadena aleatoria en lugar del ID de usuario como parámetro de ruta, puedes modificar el código de la siguiente manera:

    web.php

    Route::get('/menu/{random}', 'CartController@menuByRandom');
    

    CartController.php

    public function menuByRandom($random)
    {
        $user = User::where('random', $random)->firstOrFail();
        return view('new_menu')->with(['user' => $user]);
    }
    

    En este código actualizado, cambiamos el nombre del método menu a menuByRandom, y modificamos el parámetro de ruta de $user a $random. Luego, modificamos el método menuByRandom para buscar al usuario por el campo random en la tabla users, y devolver un error 404 si no se encuentra ningún usuario coincidente. Finalmente, actualizamos la vista con la variable user.

    Con estos cambios, deberías poder usar una cadena aleatoria en lugar del ID de usuario como parámetro de ruta.

Comments are closed.