Saltar al contenido principal

Enrutamiento básico

Las rutas más básicas de Laravel reciben un URI y una closure. Puedes definir rutas y sus comportamientos con facilidad, sin archivos de configuración complejos.
use Illuminate\Support\Facades\Route;

Route::get('/greeting', function () {
    return 'Hello World';
});

Archivos de ruta por defecto

Todas las rutas de Laravel se definen en los archivos del directorio routes/. Laravel los carga automáticamente en función de la configuración en bootstrap/app.php. Define en routes/web.php las rutas dirigidas al navegador. A las rutas de este archivo se les aplica el grupo de middleware web, que aporta sesión, protección CSRF y cifrado de cookies.
use App\Http\Controllers\UserController;

Route::get('/user', [UserController::class, 'index']);

Rutas de API

Si la aplicación ofrece una API sin estado, puedes habilitar el enrutamiento de API con el comando Artisan install:api.
php artisan install:api
El comando install:api instala Laravel Sanctum y crea el archivo routes/api.php. Sanctum ofrece un guard sencillo y robusto de autenticación por API tokens para consumidores externos, SPAs y aplicaciones móviles.
Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware('auth:sanctum');
Las rutas de routes/api.php son sin estado y se les aplica el grupo de middleware api. Además, se aplica automáticamente el prefijo /api a todas las rutas, por lo que no necesitas añadirlo manualmente. Para cambiar el prefijo, edita el archivo bootstrap/app.php.
->withRouting(
    api: __DIR__.'/../routes/api.php',
    apiPrefix: 'api/admin',
    // ...
)

Métodos HTTP disponibles

El router permite registrar rutas para todos los métodos HTTP.
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Para rutas que responden a varios métodos HTTP, usa match o any.
Route::match(['get', 'post'], '/', function () {
    // ...
});

Route::any('/', function () {
    // ...
});
En los formularios HTML que envían POST, PUT, PATCH o DELETE a rutas de web, incluye siempre la directiva @csrf. Sin ella, la solicitud será rechazada.

Rutas que devuelven una vista

Si la ruta simplemente devuelve una vista, Route::view te permite escribirlo de forma concisa.
Route::view('/welcome', 'welcome');

// Con datos para la vista
Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

Parámetros de ruta

Parámetros obligatorios

Para capturar parte de la URL de forma dinámica, usa parámetros de ruta. Se encierran entre {} y se reciben como argumentos del callback.
Route::get('/user/{id}', function (string $id) {
    return 'ID de usuario: ' . $id;
});
También puedes definir varios parámetros.
Route::get('/posts/{post}/comments/{comment}', function (string $postId, string $commentId) {
    return "Comentario {$commentId} del post {$postId}";
});
Los parámetros de ruta no pueden contener el carácter /.

Parámetros opcionales

Para hacer opcional un parámetro, añade ? al final de su nombre y proporciona un valor por defecto en el argumento correspondiente.
Route::get('/user/{name?}', function (?string $name = null) {
    return $name ?? 'Invitado';
});

Route::get('/user/{name?}', function (?string $name = 'Invitado') {
    return $name;
});

Restricción de parámetros con expresiones regulares

Con el método where puedes restringir el formato del parámetro mediante una expresión regular.
Route::get('/user/{id}', function (string $id) {
    // ...
})->where('id', '[0-9]+');

Route::get('/user/{name}', function (string $name) {
    // ...
})->where('name', '[a-zA-Z]+');
Los patrones más habituales tienen métodos abreviados.
Route::get('/user/{id}/{name}', function (string $id, string $name) {
    // ...
})->whereNumber('id')->whereAlpha('name');

Rutas con nombre

Las rutas con nombre te permiten generar URLs o hacer redirecciones referenciando la ruta por su nombre.
Route::get('/user/profile', function () {
    // ...
})->name('profile');

Generar URLs de rutas con nombre

Genera URLs a partir del nombre de la ruta con el helper route.
// Generar URL
$url = route('profile');

// Generar URL con parámetros
$url = route('user.show', ['id' => 1]);

Redirección

return redirect()->route('profile');

Grupos de rutas

Puedes agrupar rutas relacionadas para compartir configuración de middlewares, controlador, prefijo, etc.

Middleware

Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', function () {
        // Solo accesible por usuarios autenticados
    });

    Route::get('/account', function () {
        // Solo accesible por usuarios autenticados
    });
});

Controlador

Agrupa las rutas que usan el mismo controlador.
use App\Http\Controllers\OrderController;

Route::controller(OrderController::class)->group(function () {
    Route::get('/orders', 'index');
    Route::post('/orders', 'store');
    Route::get('/orders/{id}', 'show');
});

Prefijo

Añade un prefijo común a los URIs de un grupo de rutas.
Route::prefix('admin')->group(function () {
    Route::get('/users', function () {
        // Accesible en /admin/users
    });
    Route::get('/posts', function () {
        // Accesible en /admin/posts
    });
});

Listar rutas

Para ver todas las rutas definidas, usa el comando Artisan:
php artisan route:list
Para mostrar también la información de middlewares:
php artisan route:list -v
Para mostrar solo las rutas que empiezan por un URI concreto:
php artisan route:list --path=user

Próximos pasos

Vistas

Aprende a crear vistas y a pasarles datos desde los controladores.
Última modificación el 13 de julio de 2026