Výměna souborů jádra v Laravelu 11 a novějších verzích
V systému Laravel 11 a novějších verzích je tradiční App\Http\Kernel a App\Console\Kernel třídy byly odstraněny. Místo toho byly jejich povinnosti přesunuty do bootstrap/app.php pomocí nového, zjednodušeného a centralizovaného přístupu ke konfiguraci.
V tomto příspěvku se dozvíte, jak migrovat logiku plánování middlewaru a konzoly ze starých tříd jádra do nové struktury Laravel 11 a novějších.
Změny jádra HTTP: Konfigurace middlewaru
Dříve se nastavení middlewaru provádělo v nástroji App\Http\Kernel. Museli jste spravovat tři hlavní pole:
$middleware: globální middleware$middlewareGroups: middleware skupiny proweb,api, atd.$middlewareAliases: aliasy middlewaru trasy
V Laravelu 11 se nyní všechny tyto funkce ukládají do uzávěru uvnitř. bootstrap/app.php, s použitím withMiddleware() metoda:
->withMiddleware(function (Middleware $middleware) { // Global middleware $middleware->append(EnsureTokenIsValid::class); // Middleware groups $middleware->appendToGroup('group-name', [ First::class, Second::class, ]); $middleware->prependToGroup('group-name', [ First::class, Second::class, ]); // Middleware aliases $middleware->alias([ 'subscribed' => EnsureUserIsSubscribed::class ]);})
Změny v jádře konzole: Plánování a příkazy
Před Laravelem 11 bylo plánování příkazů definováno v příkazu App\Console\Kernel třídy, zejména v schedule() a commands() metody.
Nyní jsou naplánované úlohy i příkazové trasy definovány v položce routes/console.php, jako je tento:
use Illuminate\Console\Scheduling\Schedule; Schedule::command('inspire')->hourly();
Tyto příkazy není třeba explicitně registrovat v příkazu. Kernel protože Laravel je automaticky načte z třídy routes/console.php pokud tento soubor zahrnete pomocí příkazu withRouting() in bootstrap/app.php:
->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up',)
Ve výchozím nastavení Laravel automaticky registruje všechny příkazy do složky app/Console/Commands. Chcete-li zaregistrovat příkazy z jiných adresářů nebo zadat příkazy ručně, použijte příkaz withCommands metoda v bootstrap/app.php:
->withCommands([ __DIR__.'/../app/Domain/Orders/Commands', // Scan directory \App\Domain\Orders\Commands\SendEmails::class, // Or register specific classes])
Při spuštění systému Artisan se tyto příkazy automaticky vyřeší a zaregistrují.
Závěrečná stránka bootstrap/app.php Příklad
Zde se dozvíte, jak kompletní bootstrap/app.php soubor může vypadat v Laravelu 11 a novějším:
use Illuminate\Foundation\Application;use Illuminate\Foundation\Configuration\Exceptions;use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // Configure middleware here (see full example above) }) ->withCommands([ // __DIR__.'/../app/Domain/Orders/Commands', // \App\Console\Commands\Inspire::class, ]) ->withExceptions(function (Exceptions $exceptions) { // Handle exceptions here }) ->create();
kernel.php: Před vs. po
Před (Laravel 10 a starší)
// app/Http/Kernel.phpclass Kernel extends HttpKernel{ protected $middleware = [ \App\Http\Middleware\EnsureTokenIsValid::class, ]; protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, ], ]; protected $middlewareAliases = [ 'subscribed' => \App\Http\Middleware\EnsureUserIsSubscribed::class, ];} // app/Console/Kernel.phpclass Kernel extends ConsoleKernel{ protected function schedule(Schedule $schedule): void { $schedule->command('inspire')->hourly(); } protected function commands(): void { $this->load(__DIR__.'/Commands'); }}
Po (Laravel 11 a 12)
// bootstrap/app.phpuse Illuminate\Foundation\Configuration\Middleware;use Illuminate\Support\Facades\Schedule; return Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__.'/../routes/web.php', commands: __DIR__.'/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->append(\App\Http\Middleware\EnsureTokenIsValid::class); $middleware->alias([ 'subscribed' => \App\Http\Middleware\EnsureUserIsSubscribed::class, ]); }) ->withCommands([ __DIR__.'/../app/Console/Commands', ]) ->create(); // routes/console.phpSchedule::command('inspire')->hourly();
Závěr
Laravel 11 zjednodušil zavádění aplikací tím, že konsolidoval logiku jádra do. bootstrap/app.php. Tento moderní přístup snižuje počet šablon a udržuje konfiguraci centralizovanou, čímž je vaše aplikace lépe udržovatelná a přehlednější.