Routing je fundamentom každého webovo orientovaného MVC frameworku, no nie je špecifikom MVC - routing sa používa aj inde. Router prichádza ako prvý do kontaktu s požiadavkou. Obsahuje logiku spracovania, alebo jej ďalšieho presmerovania. V rámci rozdelenia zodpovednosti v modeli MVC je logika spracovania požiadavky oddelená do tzv. controllerov, ktoré preberajú zodpovednosť za spracovanie.
Dlhú dobu Laravel v defaulte obsahoval jediný súbor routes.php
, kde boli definované všetky routy na jednom mieste. Od verzie 5.3
však bol tento súbor premiestnený do samostatného adresára routes
v koreňovom adresári projektu a rozdelený do viacerých súborov. Na routy v súbore routes/web.php
sa aplikuje middleware web (stavy, CSRF), zatiaľ čo na routy v súbore routes/api.php
sú bezstavové a aplikuje sa na ne middleware api
.
Najjednoduchšia možnosť ako zadefinovať route a poslať do prehliadača dáta je použitie callbacku priamo v route súbore. V tomto prípade sa stáva Router zároveň controllerom, keďže zodpovednosť za spracovanie požiadavky neposúva na dedikovaný controller.
Route::get('test', function () {
return 'Môj prvý výstup';
});
Táto metóda routingu môže poslúžiť napríklad pri ladení aplikácie, oveľa častejšie však pre aplikácie bežného rozsahu v MVC využijete nasledujúcu metódu, kde ako callback uvediete dedikovaný controller a jeho metódu, ktorá bude požiadavku spracovávať
Route::get('dashboard', 'DashboardController@index');
Fasáda Route
umožňuje definíciu všetkých dostupných HTTP metód (get
, post
, put
, patch
, delete
, options
).
Keďže HTML formuláre do verzie HTML 4, resp. XHTML 1 podporujú len metódy GET
a POST
, na využívanie ďalších metód potrebujeme vo formulároch definovat skryté pole (tzv. form method spoofing, o ktorom si povieme viac v článku a pokročilom routovaní).
V aplikáciach často potrebujeme definovať parametrické URI, teda URI s premennými segmentami. Na definíciu parametrov použijeme zložené zátvorky {}
.
Route::get('/thread/{slug}', function ($slug) {
return $slug;
});
resp.
Route::get('/thread/{slug}', 'ThreadController@show');
Parametrov môže byť viac.
Route::get('/{user}/{slug}', 'ThreadController@show');
Parametre môžu byť nepovinné
Route::get('/thread/{slug?}', 'ThreadController@show');
Parametre je možné obmedziť regulárnym výrazom
Route::get('/thread/{slug}', 'ThreadController@show')->where('slug' => '[a-z-]+');
Veľmi praktická možnosť je dať niektorým routam (podľa použitia) názov. Práca s nimi je potom rýchlejšia, jednoduchšia a prehľadnejšia.
Route::get('/thread/{slug}', 'ThreadController@show')->name('thread.show');
Na generovanie URL z pomenovanej routy nám poslúži funkcia route
route('thread.show', ['slug' => 'hello-world']);
// thread/hello-world
Routovanie v Laraveli je pomerne jednoduchá záležitosť. V tomto blogu som zhrnul základné možnosti, ktoré využijete najčastejšie. Užitočných možností je však omnoho viac. Pre lepší prehľad odporúčam prejsť dokumentáciu routingu.
Ďalší blog o controlleroch vám predstaví základné princípy oddelenia logiky spracovania požiadavky do samostatných súborov.
To možeš ľahko zmeniť. Registrácia je zdarma a ako registrovaný člen získaš množstvo výhod. Prečítaj si prečo by si mal byť členom.
Prihlásiť sa Zaregistrovať