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 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 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 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 hace 2 años
un grande
-
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 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 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
-