Fáze požadavku: 2. Bootstrap aplikace (bootstrap/app.php)
Modul 2 · Lekce 1

Mapa adresářů Laravel 12: Co kam patří a proč

💡 Shrnutí lekce

Zorientujte se v moderní zeštíhlené struktuře Laravelu 12, pochopte konec dřívějších Kernel tříd a osvojte si pravidla, kam v čisté architektuře patří modely, controllery, DTO a konfigurace.

Radikální zjednodušení v Laravelu 11 a 12

Pokud jste v minulosti pracovali se staršími verzemi Laravelu (verze 10 a dřívější), nový projekt v Laravelu 12 vás okamžitě překvapí svou čistotou a minimem souborů. Laravel prošel nejvýraznější redukcí adresářové struktury ve své historii:

  • Zcela zmizely soubory app/Http/Kernel.php a app/Console/Kernel.php. Veškerá konfigurace middleware, routování a plánovače úloh se nyní provádí funkcionálně a přehledně v souboru bootstrap/app.php.
  • Složka config/ je téměř prázdná. Laravel 12 obsahuje ve výchozím stavu pouze ty konfigurační soubory, které vývojář explicitně publikoval. Všechny ostatní výchozí hodnoty si framework bere přímo ze svých interních balíčků.
  • Odstranění prázdných adresářů: Pokud v aplikaci nepotřebujete Channels, Events nebo Jobs, složky pro ně v app/ vůbec neexistují, dokud nespustíte příslušný Artisan generátor (make:event, make:job).

Anatomická mapa hlavních adresářů projektu

Podívejme se, jakou roli hrají jednotlivé složky v našem reálném projektu agy-laravel:

  1. app/ (Aplikační logika):

    • Http/Controllers/: Tenké controllery odbavující HTTP požadavky.
    • Http/Middleware/: Ochranné filtry požadavků (např. EnsureStudentProfile.php).
    • Models/: Eloquent modely (CourseModule, CourseLesson, QuizQuestion, StudentProfile).
    • Services/: Doménové služby (např. AnatomyInspectorService, StudentProgressService).
    • Data/: Neměnná DTO pro bezpečný přenos dat (LessonContentData, AnatomyFileNodeData).
    • Enums/: Nativní string-backed výčtové typy (LifecyclePhase, ModuleDifficulty).
    • Livewire/: Reaktivní komponenty rozhraní (LessonQuiz, AnatomyExplorer).
  2. bootstrap/ (Inicializace frameworku):

    • Obsahuje soubor bootstrap/app.php, kde se přes Application::configure() konfigurují routy, middleware a zpracování výjimek. Dále složku bootstrap/cache/ pro zkompilované manifesty služeb a rout.
  3. config/ (Konfigurace):

    • Soubory jako config/app.php, config/database.php. Všechny hodnoty jsou napojeny na proměnné prostředí přes funkci env().
  4. database/ (Databázová vrstva):

    • migrations/: Verzované schéma PostgreSQL tabulek.
    • seeders/: Výchozí data (včetně modulů kurzu v seeders/Curriculum/).
  5. public/ (Jediný veřejný adresář):

    • Pouze public/index.php a vygenerované CSS/JS assety. Webserver nikdy nesmí mít přístup do kořenového adresáře!
  6. resources/ (Prezentace a zdrojové kódy frontendu):

    • views/: Blade šablony a komponenty.
    • css/ a js/: Vstupní soubory pro Vite compiler (Tailwind CSS, Alpine.js).
  7. routes/ (Směrování):

    • routes/web.php pro webové rozhraní a routes/console.php pro Artisan příkazy.
💻 Klíčová konstrukce z praxe
<?php

declare(strict_types=1);

use App\Http\Middleware\EnsureStudentProfile;
use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

// Ukázka moderního srdce konfigurace Laravelu 12 (bootstrap/app.php)
return Application::configure(basePath: dirname(__DIR__))
    // 1. Fluentní registrace souborů rout a health-check endpointu
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    // 2. Náhrada za dřívější app/Http/Kernel.php: registrace middleware
    ->withMiddleware(function (Middleware $middleware): void {
        $middleware->web(append: [
            EnsureStudentProfile::class, // Náš middleware pro anonymní profil studenta
        ]);
    })
    // 3. Konfigurace zpracování výjimek
    ->withExceptions(function (Exceptions $exceptions): void {
        // Zde lze definovat custom renderers a reporting pravidel
    })->create();

🎯 Ověření znalostí z lekce

Kvíz otestuje pochopení architektury a reálného kódu probíraného v této lekci.

Otázka 1 z 3

Kde se v moderním Laravelu 12 konfigurují globální a routové middleware namísto dřívějšího app/Http/Kernel.php?

Otázka 2 z 3

Který adresář projektu musí být nastaven jako Document Root webového serveru (Caddy / FrankenPHP / Nginx)?

Otázka 3 z 3

Jak Laravel 12 zachází s konfiguračními soubory v adresáři config/?

Zodpovězeno: 0 / 3
🔬 Živá anatomie v této aplikaci
3 soubory
Na co se v kódu zaměřit: Otevři si soubor bootstrap/app.php a porovnej jej se staršími verzemi Laravelu. Všimni si, jak metoda ->withRouting() a ->withMiddleware() nahradily desítky řádků dřívějších Kernel tříd. V config/app.php prozkoumej klíče timezone, locale a cipher.
cesta: composer.json
87 řádků · 2.8 KB
Projektový manifest Composeru definující PHP 8.4, Laravel 12 závislosti a PSR-4 autoloading.
1 {
2 "$schema": "https://getcomposer.org/schema.json",
3 "name": "laravel/laravel",
4 "type": "project",
5 "description": "The skeleton application for the Laravel framework.",
6 "keywords": ["laravel", "framework"],
7 "license": "MIT",
8 "require": {
9 "php": "^8.2",
10 "laravel/framework": "^12.0",
11 "laravel/tinker": "^2.10.1",
12 "livewire/livewire": "^3.0"
13 },
14 "require-dev": {
15 "fakerphp/faker": "^1.23",
16 "laravel/pail": "^1.2.2",
17 "laravel/pint": "^1.24",
18 "laravel/sail": "^1.41",
19 "mockery/mockery": "^1.6",
20 "nunomaduro/collision": "^8.6",
21 "phpunit/phpunit": "^11.5.50"
22 },
23 "autoload": {
24 "psr-4": {
25 "App\\": "app/",
26 "Database\\Factories\\": "database/factories/",
27 "Database\\Seeders\\": "database/seeders/"
28 }
29 },
30 "autoload-dev": {
31 "psr-4": {
32 "Tests\\": "tests/"
33 }
34 },
35 "scripts": {
36 "setup": [
37 "composer install",
38 "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"",
39 "@php artisan key:generate",
40 "@php artisan migrate --force",
41 "npm install",
42 "npm run build"
43 ],
44 "dev": [
45 "Composer\\Config::disableProcessTimeout",
46 "npx concurrently -c \"#93c5fd,#c4b5fd,#fb7185,#fdba74\" \"php artisan serve\" \"php artisan queue:listen --tries=1 --timeout=0\" \"php artisan pail --timeout=0\" \"npm run dev\" --names=server,queue,logs,vite --kill-others"
47 ],
48 "test": [
49 "@php artisan config:clear --ansi",
50 "@php artisan test"
51 ],
52 "post-autoload-dump": [
53 "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
54 "@php artisan package:discover --ansi"
55 ],
56 "post-update-cmd": [
57 "@php artisan vendor:publish --tag=laravel-assets --ansi --force"
58 ],
59 "post-root-package-install": [
60 "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
61 ],
62 "post-create-project-cmd": [
63 "@php artisan key:generate --ansi",
64 "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"",
65 "@php artisan migrate --graceful --ansi"
66 ],
67 "pre-package-uninstall": [
68 "Illuminate\\Foundation\\ComposerScripts::prePackageUninstall"
69 ]
70 },
71 "extra": {
72 "laravel": {
73 "dont-discover": []
74 }
75 },
76 "config": {
77 "optimize-autoloader": true,
78 "preferred-install": "dist",
79 "sort-packages": true,
80 "allow-plugins": {
81 "pestphp/pest-plugin": true,
82 "php-http/discovery": true
83 }
84 },
85 "minimum-stability": "stable",
86 "prefer-stable": true
87 }
88
cesta: bootstrap/app.php
23 řádků · 0.7 KB
Nové jádro Laravel 12 pro registraci webových i konzolových rout, middleware pipeline a zachytávání výjimek bez Http Kernelu.
1 <?php
2
3 declare(strict_types=1);
4
5 use App\Http\Middleware\EnsureStudentProfile;
6 use Illuminate\Foundation\Application;
7 use Illuminate\Foundation\Configuration\Exceptions;
8 use Illuminate\Foundation\Configuration\Middleware;
9
10 return Application::configure(basePath: dirname(__DIR__))
11 ->withRouting(
12 web: __DIR__.'/../routes/web.php',
13 commands: __DIR__.'/../routes/console.php',
14 health: '/up',
15 )
16 ->withMiddleware(function (Middleware $middleware): void {
17 $middleware->web(append: [
18 EnsureStudentProfile::class,
19 ]);
20 })
21 ->withExceptions(function (Exceptions $exceptions): void {
22 //
23 })->create();
24
cesta: config/app.php
128 řádků · 4.2 KB
Soubor aplikační architektury v modulu Configuration.
1 <?php
2
3 declare(strict_types=1);
4
5 return [
6
7 /*
8 |--------------------------------------------------------------------------
9 | Application Name
10 |--------------------------------------------------------------------------
11 |
12 | This value is the name of your application, which will be used when the
13 | framework needs to place the application's name in a notification or
14 | other UI elements where an application name needs to be displayed.
15 |
16 */
17
18 'name' => env('APP_NAME', 'Laravel'),
19
20 /*
21 |--------------------------------------------------------------------------
22 | Application Environment
23 |--------------------------------------------------------------------------
24 |
25 | This value determines the "environment" your application is currently
26 | running in. This may determine how you prefer to configure various
27 | services the application utilizes. Set this in your ".env" file.
28 |
29 */
30
31 'env' => env('APP_ENV', 'production'),
32
33 /*
34 |--------------------------------------------------------------------------
35 | Application Debug Mode
36 |--------------------------------------------------------------------------
37 |
38 | When your application is in debug mode, detailed error messages with
39 | stack traces will be shown on every error that occurs within your
40 | application. If disabled, a simple generic error page is shown.
41 |
42 */
43
44 'debug' => (bool) env('APP_DEBUG', false),
45
46 /*
47 |--------------------------------------------------------------------------
48 | Application URL
49 |--------------------------------------------------------------------------
50 |
51 | This URL is used by the console to properly generate URLs when using
52 | the Artisan command line tool. You should set this to the root of
53 | the application so that it's available within Artisan commands.
54 |
55 */
56
57 'url' => env('APP_URL', 'http://localhost'),
58
59 /*
60 |--------------------------------------------------------------------------
61 | Application Timezone
62 |--------------------------------------------------------------------------
63 |
64 | Here you may specify the default timezone for your application, which
65 | will be used by the PHP date and date-time functions. The timezone
66 | is set to "UTC" by default as it is suitable for most use cases.
67 |
68 */
69
70 'timezone' => 'UTC',
71
72 /*
73 |--------------------------------------------------------------------------
74 | Application Locale Configuration
75 |--------------------------------------------------------------------------
76 |
77 | The application locale determines the default locale that will be used
78 | by Laravel's translation / localization methods. This option can be
79 | set to any locale for which you plan to have translation strings.
80 |
81 */
82
83 'locale' => env('APP_LOCALE', 'en'),
84
85 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'),
86
87 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'),
88
89 /*
90 |--------------------------------------------------------------------------
91 | Encryption Key
92 |--------------------------------------------------------------------------
93 |
94 | This key is utilized by Laravel's encryption services and should be set
95 | to a random, 32 character string to ensure that all encrypted values
96 | are secure. You should do this prior to deploying the application.
97 |
98 */
99
100 'cipher' => 'AES-256-CBC',
101
102 'key' => env('APP_KEY'),
103
104 'previous_keys' => [
105 ...array_filter(
106 explode(',', (string) env('APP_PREVIOUS_KEYS', ''))
107 ),
108 ],
109
110 /*
111 |--------------------------------------------------------------------------
112 | Maintenance Mode Driver
113 |--------------------------------------------------------------------------
114 |
115 | These configuration options determine the driver used to determine and
116 | manage Laravel's "maintenance mode" status. The "cache" driver will
117 | allow maintenance mode to be controlled across multiple machines.
118 |
119 | Supported drivers: "file", "cache"
120 |
121 */
122
123 'maintenance' => [
124 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'),
125 'store' => env('APP_MAINTENANCE_STORE', 'database'),
126 ],
127
128 ];
129
Zdroj: skutečné soubory této aplikace Plný průzkumník anatomie →