Lección 6 de 45 10 min de lectura

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:

php
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 debe coincidir

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:

php
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:

php
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:

php
// 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:

php
// 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() y whereAlphaNumeric() son atajos útiles

En la siguiente lección aprenderás a organizar mejor tu código usando controladores.

¿Te está gustando el curso?

Tenemos cursos premium con proyectos reales, soporte personalizado y certificado.

Descubrir cursos premium