Rutas con parámetros
Las rutas estáticas están bien, pero la mayoría
de aplicaciones necesitan URLs dinámicas como
/usuarios/42 o
/posts/mi-primer-articulo. En esta
lección aprenderás a capturar valores de la URL
usando parámetros.
Parámetros obligatorios
Un parámetro se define entre llaves
{} en la URL. Laravel captura ese
valor y lo pasa a tu función:
Route::get('/usuarios/{id}', function (int $id) {
return "Usuario con ID: $id";
});
Si visitas /usuarios/42, verás
"Usuario con ID: 42". El valor
42 se captura automáticamente en la
variable $id.
El nombre del parámetro en la URL
({id}) debe coincidir con
el nombre de la variable en la función
($id).
Múltiples parámetros
Puedes tener varios parámetros en una misma ruta:
Route::get('/posts/{category}/{slug}', function (string $category, string $slug) {
return "Categoría: $category, Post: $slug";
});
Con
/posts/tecnologia/mi-primer-post
obtienes "Categoría: tecnologia, Post:
mi-primer-post".
Parámetros opcionales
A veces quieres que un parámetro sea opcional.
Añade ? después del nombre y define
un valor por defecto:
Route::get('/saludo/{name?}', function (string $name = 'invitado') {
return "Hola, $name";
});
/saludo devuelve "Hola, invitado" y
/saludo/María devuelve "Hola,
María".
Restricciones con where
Puedes limitar qué valores acepta un parámetro usando expresiones regulares:
// Solo números
Route::get('/usuarios/{id}', function (int $id) {
return "Usuario: $id";
})->where('id', '[0-9]+');
// Solo letras
Route::get('/categorias/{name}', function (string $name) {
return "Categoría: $name";
})->where('name', '[a-zA-Z]+');
Con estas restricciones,
/usuarios/abc dará error 404 porque
abc no son números.
Helpers de restricción
Laravel incluye métodos helper para restricciones comunes:
// Solo números
Route::get('/productos/{id}', function (int $id) {
return "Producto: $id";
})->whereNumber('id');
// Solo letras
Route::get('/tags/{tag}', function (string $tag) {
return "Tag: $tag";
})->whereAlpha('tag');
// Letras y números
Route::get('/posts/{slug}', function (string $slug) {
return "Post: $slug";
})->whereAlphaNumeric('slug');
Ejercicios
Ejercicio 1: Ruta de perfil de usuario
Crea una ruta
/perfil/{username} que muestre
"Perfil de: " seguido del nombre de usuario. El
username solo debe aceptar letras y números.
Ver solución
Route::get('/perfil/{username}', function (string $username) {
return "Perfil de: $username";
})->whereAlphaNumeric('username');
Ejercicio 2: Ruta con parámetro opcional
Crea una ruta /idioma/{codigo?} que
devuelva "Idioma: es" por defecto, o el código
proporcionado. El código debe ser exactamente 2
letras.
Ver solución
Route::get('/idioma/{code?}', function (string $code = 'es') {
return "Idioma: $code";
})->where('code', '[a-z]{2}');
Ejercicio 3: Ruta de archivo por año y mes
Crea una ruta
/archivo/{year}/{month} que muestre
"Archivo de: [year]/[month]". El año debe ser 4
dígitos y el mes 2 dígitos.
Ver solución
Route::get('/archivo/{year}/{month}', function (int $year, int $month) {
return "Archivo de: $year/$month";
})->where(['year' => '[0-9]{4}', 'month' => '[0-9]{2}']);
Resumen
En esta lección aprendiste:
-
Los parámetros se definen con
{name}en la URL -
Los parámetros opcionales usan
{name?}y valor por defecto -
where()restringe valores con expresiones regulares -
whereNumber(),whereAlpha()ywhereAlphaNumeric()son atajos útiles
En la siguiente lección aprenderás a organizar mejor tu código usando controladores.
¿Has encontrado un error o tienes una sugerencia para mejorar esta lección?
Escríbenos¿Te está gustando el curso?
Tenemos cursos premium con proyectos reales, soporte personalizado y certificado.
Descubrir cursos premium