Kernel.php v Laravel 12: Kde je?

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...

Poptat web

17. 10. 2025

Kernel.php v Laravel 12: Kde je?

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 pro web, 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.php
class 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.php
class 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.php
use 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.php
Schedule::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ší.

Původní článek publikoval Nabil Hassen.