24. Cómo generar url's amigables

En este capítulo de Laravel, aprenderás a utilizar la función getRouteKeyName para crear URL amigables y fáciles de recordar para tus modelos en Laravel. Con getRouteKeyName, puedes especificar el nombre de un campo de tu modelo para que sea utilizado como clave en lugar del id predeterminado. Esto te permitirá crear URLs más legibles y semánticamente significativas para tus usuarios, lo que a su vez mejorará la experiencia del usuario y el SEO de tu sitio. Aprenderás cómo implementar getRouteKeyName en tu proyecto Laravel y cómo personalizar tus URL utilizando los nombres de campo que mejor se adapten a tus necesidades.


7 comentarios

Inicia sesión para comentar

Comentarios:

  • Elis Morán

    Elis Morán hace 9 meses

    Aplique las indicaciones d elos comentarios, pero sigo sin poder crear un curso, me da error Missing required parameter for [Route: cursos.show] [URI: cursos/{curso}] [Missing parameter: curso].

  • Jordi Fernandez

    Jordi Fernandez hace 1 año

    Buenas a mi en Laravel 10 no me funciona. Al cambiar getRouteKeyName() no me recupera el curso sabeis porque puede estar pasando?

    • Victor Arana Flores hace 1 año

      Seguramente no tienes el nombre de campo que has pedido usar.

  • Martzdev

    Martzdev hace 1 año

    Quienes tengan error al momento de guardar un curso deben agregar en el modelo:
    
        // asignacion masiva
        protected $fillable = ['nombre', 'descripcion', 'categoria', 'precio'];
    
    
        // creamos el slug con base al campo nombre
        protected static function boot()
        {
            parent::boot();
    
    
            static::creating(function ($request) {
                $request->slug = Str::slug($request->nombre);
            });
        }
    
    
        // obtenemos la URI de la ruta mediante slug y no por id
        public function getRouteKeyName()
        {
            return 'slug';
        }
        
        
  • Bruno Decruz

    Bruno Decruz hace 2 años

    un grande

  • Javi

    Javi hace 2 años

    Buenas Victor, lo primero de todo darte las gracias por tus cursos, te explicas muy bien y de una forma fácil de comprender. 

     

    Sobre este bloque quería añadir que si vamos a trabajar con “slugs” y vamos a buscar por las mismas, sería interesante que al crear este campo lo hagamos de tipo “unique” ya que vamos a tener un problema si tenemos dos url con el mismo nombre.

     

    Un saludo  y gracias por los aportes!

  • Walter

    Walter hace 2 años

    ? Comenzamos añadiéndole a la migración de cursos un campo llamado slug:

    $table->string('slug');

          Actualizamos el factory haciendo uso de:

    use Illuminate\Support\Str;

          Definimos la variable $name en el método definition():

    $name = $this->faker->sentence();

          En el array que devuelve:

    'name' => $name;
    'slug' => Str::slug($name, '-');

     

          Ejecutamos la migración:

    php artisan migrate:fresh --seed

     

          El método que nos permite recuperar el id a partir de $cursos es getRouteKeyName() y se encuentra en vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php, el cual redefinimos en el modelo app\Models\Curso.php:

    public function getRouteKeyName() {
    	return 'slug';
    }

     

    • Jerónimo Sánchez hace 2 años

      En el canal de youtube de Coders Free nos respondió a este tema el usuario Jose María Barragan. A lo anterior mencionado por Walter habría que añadir …

       

      Dos pasos: 
      1. En el blade create y edit, debajo del error por Name, agregar:
        <input type="hidden" name="slug" value="slug">

      2. En el controlador antes del curso->update del edit o curso->create del store, agregar:
         $request->merge([
           'slug' => Str::slug($request->name),
         ]);

       

    • Carlos Romero hace 1 año

      Ya no están los comentarios, es una pena quería guiarme para mis errores. :(

  • Ruben

    Ruben hace 2 años

    Como puedo solucionar este problema, pro favor

    • Victor Arana Flores hace 2 años

      Agrega en tu formulario de crear registro, el campo slug, y mandaselo junto con los demas campos

    • Ruben hace 2 años

      okis, gracias