IronWoods.es

Desarrollo web

Laravel 11. Registrando cosas

Laravel 11 introduce cambios importantes en la forma en que registramos las clases en la aplicación. En general, todo ira en el fichero "bootstrap/app.php" dentro de un bloque como este:


return Application::configure(basePath: dirname(__DIR__))
    ...
    ->create();

Registrar middlewares

El fichero "app/Http/Kernel.php" desaparece, entonces para registrar los middlewares, usamos el fichero "bootstrap/app.php" donde tendremos algo como:


->withMiddleware(function (Middleware $middleware) {
        $middleware->statefulApi(); // enable sanctum frontend middleware
        $middleware->throttleApi('api', false);

        $middleware->web(append: [
            LanguageMiddleware::class,
            ...
        ]);
        $middleware->api(append: [
            CheckApiMiddleware::class,
            ...
        ]);
    })

Los métodos disponibles pueden consultarse en la propia clase: Illuminate\Foundation\Configuration\Middleware

Registrar comandos

Si dejamos los comandos dentro de "app/Console/Commands/" o un subdirectorio no habrá que registrar el comando. Si lo sacamos de su ubicación por defecto, debe registrarse en "bootstrap/app.php", p.e. la clase FooCommand:


->withCommands([
    FooCommand::class,
])

Gestión de excepciones

Como en otros casos, se usa el fichero "bootstrap/app.php":


->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontReport(MissedFlightException::class);

    $exceptions->report(function (InvalidOrderException $e) {
        // ...
    });
})

Los métodos disponibles pueden consultarse en la propia clase: Illuminate\Foundation\Configuration\Exceptions

Registrar "service providers"

Usaremos el array del fichero "bootstrap/providers.php".

Registrar ficheros de rutas, prefijos, etc.

Dentro de "bootstrap/app.php" podemos registrar algo como:


->withRouting(
    api: __DIR__.'/../routes/api.php',
    apiPrefix: 'api',
    commands: __DIR__.'/../routes/console.php',
    health: '/up',
    web: __DIR__.'/../routes/web.php',
)

Prefiero crear varios archivos para cada tipo de ruta, por el momento puede usarse Route en alguno de los ficheros ya indicados, p.e. en "routes/api.php":


<?php

use Illuminate\Support\Facades\Route;

Route::prefix('v1')->group(base_path('routes/api_v1_public.php'));
Route::prefix('v1')->group(base_path('routes/api_v1_private.php'));

Para las rutas anteriores el prefijo completo será: "api/v1/"