Kurs Laravel 13 #2: routing, trasy i parametry adresu
zweryfikowano 7 września 2026 · 5 min
Trasy deklaruje się w routes/web.php zapisem Route::get('/chemin', [MonController::class, 'methode']). Nazywaj je przez ->name(), żeby budować odnośniki funkcją route('nom'), a nie na sztywno. Składnia z łańcuchem 'Controller@methode' nie działa od Laravela 8.
Trasa wiąże adres z kodem. To brama wejściowa każdego żądania: Laravel odczytuje żądany adres URL, szuka pasującej trasy i wykonuje to, co ona wskazuje. Ten rozdział pokazuje cztery formy, jakie przybiera to powiązanie.
Najprostsza trasa
Wszystkie trasy publicznej części serwisu deklaruje się w routes/web.php. Oto zawartość tego pliku zaraz po instalacji:
<?php
use Illuminate\Support\Facades\Route;
Route::get('/', function () {
return view('welcome');
});Ta trasa mówi: kiedy ktoś zażąda / metodą GET, zwróć widok welcome, czyli plik resources/views/welcome.blade.php.
Route::get() przyjmuje dwa argumenty: adres i to, co ma się wtedy stać. Ten drugi argument może mieć kilka postaci.
Zwrócenie łańcucha znaków
Route::get('/bonjour', function () {
return 'Bonjour !';
});Wejdź na http://127.0.0.1:8000/bonjour: przeglądarka wyświetla czysty tekst. Przydaje się to do sprawdzenia, czy trasa w ogóle jest osiągana, rzadko do czegoś więcej.
Zwrócenie widoku
Żeby sprawdzić, że to właśnie welcome wyświetla się na stronie głównej, otwórz resources/views/welcome.blade.php i dodaj widoczną linię gdziekolwiek wewnątrz <body>:
<h1>Bonjour tout le monde !</h1>Odśwież stronę główną: nagłówek się pojawia. Zmiana dotyczyła widoku, trasa pozostała nietknięta.
Wskazanie kontrolera
W prawdziwym projekcie logika nie mieszka w pliku tras, tylko w kontrolerze. Trasa ogranicza się wtedy do wskazania klasy i metody:
use App\Http\Controllers\PostController;
Route::get('/article', [PostController::class, 'show']);Tablica [PostController::class, 'show'] znaczy „wywołaj metodę show z klasy PostController”. Kontroler jeszcze nie istnieje: tworzy go kolejny rozdział. Zwróć uwagę na use na górze pliku, który importuje klasę. Bez niego PHP poszuka PostController w globalnej przestrzeni nazw i go nie znajdzie.
Wiele kursów pisanych pod Laravela 7 i starsze wersje używa Route::get('/article', 'PostController@show'). Automatyczny prefiks przestrzeni nazw, który to umożliwiał, został usunięty w Laravelu 8. W Laravelu 13 taka trasa kończy się tym komunikatem:
Illuminate\Contracts\Container\BindingResolutionException
Target class [PostController] does not exist.Laravel szuka klasy w korzeniu przestrzeni nazw zamiast w App\Http\Controllers. Zawsze używaj formy z tablicą.
Parametry w adresie URL
Blog potrzebuje adresów zmiennych: /article/mon-premier-article, /article/un-autre. Zmienna część staje się parametrem, zapisanym w klamrach:
Route::get('/article/{slug}', function (string $slug) {
return "Vous avez demandé l'article : {$slug}";
});Laravel przechwytuje wszystko, co następuje po /article/, i przekazuje to funkcji pod nazwą $slug. Nazwa parametru w adresie i nazwa argumentu muszą się zgadzać.
Oczekiwaną postać można ograniczyć. Tutaj trasa odpowie tylko wtedy, gdy identyfikator jest liczbą:
Route::get('/article/{id}', function (int $id) {
return "Article numéro {$id}";
})->whereNumber('id');Adres w rodzaju /article/bonjour zwróci wtedy błąd 404, zamiast trafić do twojego kodu z nieoczekiwaną wartością.
Nazwane trasy
Wpisywanie adresów na sztywno w szablonach jest kruche: w dniu, w którym zmienisz /article/ na /blog/, trzeba odnaleźć każdy odnośnik. Nazwanie trasy rozwiązuje ten problem:
Route::get('/article/{slug}', [PostController::class, 'show'])->name('post');Odnośnik buduje się wtedy z nazwy, nigdy z adresu:
route('post', ['slug' => 'mon-premier-article'])
// http://127.0.0.1:8000/article/mon-premier-articleW widoku Blade wygląda to tak:
<a href="http://%20route('post',%20$post)%20">{{ $post->title }}</a>Zmień adres w web.php, a wszystkie odnośniki pójdą za nim. Tak właśnie ten kurs buduje wszystkie swoje odnośniki, począwszy od rozdziału 7.
Wiązanie modelu z trasą
Laravel potrafi pójść dalej. Jeśli parametr nosi nazwę modelu, framework sam pobiera rekord:
use App\Models\Post;
Route::get('/article/{post}', function (Post $post) {
return $post->title;
});Laravel odczytuje segment adresu, odpytuje tabelę posts i automatycznie zwraca błąd 404, jeśli nic nie pasuje. Dostajesz od razu obiekt, bez pisania zapytania. Domyślnie szuka po kolumnie id; rozdział 6 pokazuje, jak kazać mu szukać po kolumnie slug.
Wiązanie modelu oszczędza połowę zwyczajowego kodu kontrolera. W dalszej części kursu jest używane wszędzie.
Pozostałe metody HTTP
Route::get() obsługuje żądania odczytu. Do formularzy i API Laravel wystawia pozostałe metody:
Route::post('/article', [PostController::class, 'store']);
Route::put('/article/{post}', [PostController::class, 'update']);
Route::delete('/article/{post}', [PostController::class, 'destroy']);Ten kurs korzysta wyłącznie z get: zapisy pójdą przez panel administracyjny zainstalowany w rozdziale 4.
Podgląd wszystkich tras
Ta komenda wypisuje to, co twoja aplikacja potrafi obsłużyć:
php artisan route:list --except-vendorW ukończonym projekcie z tego samouczka, po zainstalowaniu panelu administracyjnego z rozdziału 4, pokazuje też trasy back-office’u: deklarują je klasy z Twojego katalogu app/Filament, a nie sam pakiet. Aby zobaczyć tylko strony witryny, dodaj --except-path=admin:
php artisan route:list --except-vendor --except-path=admin GET|HEAD / .................................... home › IndexController
GET|HEAD article/{post} ................... post › PostController@show
GET|HEAD categorie/{category} .......... category › CategoryController
GET|HEAD etiquette/{tag} ......................... tag › TagController
GET|HEAD recherche .................... search › PostController@searchOpcja --except-vendor ukrywa trasy dodane przez zainstalowane pakiety, --except-path=admin pomija trasy panelu administracyjnego, które są jak najbardziej Twoje. To pierwsze polecenie do uruchomienia, gdy adres zwraca 404, choć wydawało Ci się, że go zadeklarowałeś.
Kolejny rozdział tworzy kontrolery i widoki, które te trasy wskazują.