Základy routovania v Laraveli

xvital
napísal @xvital (327), pred 8 mesiacmi, posledná úprava 16.1.2019 09:07

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.

Route definície

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

Parametrické URI

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.

Ešte nie si členom CZ/SK Laravel komunity?

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ť

Mohlo by Ťa zaujímať: