Laravel Routing - útvonalválasztás (1. rész)

Attila | 2022. 02. 07. 11:26 | Olvasási idő: 3 perc

Címkék: #Blade #Laravel #Laravel 5.7 #Laravel 5.8 #Laravel 6 #Laravel 7 #Laravel 8 #Nézet (View) #Routing

Amikor a felhasználó beírja a böngészőbe a weboldal címét, akkor gyakorlatilag egy útvonalat kér le az alkalmazásunktól. Ez tehát az alkalmazásunk belépési pontja, innen indul minden. Az útvonalválasztás (routing) és az útvonalak regisztrációja elég sokat változott az idők során, úgyhogy ezekre a változásokra is rávilágítok majd, ahogy haladunk előre. A Laravel-lel való ismerkedést is érdemes ezzel indítani, mert gyorsan, látványos dolgokat tudunk elérni itt. A legfőbb fájl, amivel itt foglalkozunk: a routes mappában a web.php.
Routing_1

Ha megnézzük ezt a fájlt, akkor látható, hogy egyetlen érdemi utasítás található benne, ami gyakorlatilag a "kezdőoldalunk" útvonal regisztrációját tartalmazza. Szerencsére, a legtöbb Laravel által biztosított fájlban van kommentes rész is, ami elmondja, hogy mire is való maga a fájl, osztály, függvény stb.

Tipp: mivel most már fejleszteni fogjuk a Laravel-t a VSCode-ban, érdemes telepíteni hozzá olyan kiegészítőket, amelyek támogatják, segítik a fejlesztést. Én a Laravel Extension Pack-et javaslom, ami igazából egy kiterjesztés csomag. Ez tartalmaz több olyan hasznos kiegészítést a VSCode-hoz, ami a jövőben a segítségünkre lesz.

Ugye amikor elindítottuk az alkalmazásunk kiszolgálását a PHP Development Server segítségével, a php artisan serve paranccsal, akkor a 127.0.0.1:8000 IP címen és portszámon volt elérhető az alkalmazásunk kezdőoldala. Ez a kezdőoldal a / (per jel) az alkalmazásban, amit láthatunk is ebben az egy utasításban. Az látható még itt, hogy a Route nevű osztályt és annak a get nevű statikus metódusát használjuk.

Route::get('/', function () {
    return view('welcome');
});


A Route osztály nevét, nálam a VSCode pirossal aláhúzta, mivel hiányolta hozzá a szükséges osztály importálását. Ha telepítettük a fenti tippben látható kiterjesztés csomagot, akkor jobb egérgombbal tudunk kattintani a pirossal aláhúzott Route néven és a helyi menüben megjelenik az Import Class menüpont, ezt válasszuk is ki. Mivel a VSCode érzékeli, hogy több Route osztály is van különböző névterekben, ezért megkérdezi egy lenyíló listában felül, hogy melyik Route osztályt szeretnénk importálni, válasszuk ezt: Illuminate\Support\Facades\Route. Importálás után már nem lesz aláhúzva a Route utasítás. Vegyük észre, hogy bekerült a fájlunkba felülre a következő utasítás:

use Illuminate\Support\Facades\Route;


Egy kicsit a get metódusra is ki szeretnék térni. Ugye WEB-en dolgozunk és így a HTTP (HyperText Transfer Protocol) nevű protokollt használjuk. A protokoll a felhasználói kéréseknél meghatároz egy metóduslistát, ami gyakorlatilag definiálja, hogy hogyan, milyen módokon lehet kommunikálni a protokollon belül. A metóduslistáról itt van egy részletesebb leírás. Leggyakrabban útvonalat szeretnének lekérni a felhasználók, amihez a HTTP GET metódusát használjuk, úgyhogy itt is ez húzódik meg a háttérben, amikor a Laravel Route osztályának a get metódusát hívjuk és adjuk vissza az eredményt a felhasználóknak.

Azt már akkor értjük, hogy szeretnénk egy útvonalat regisztrálni, méghozzá egy olyan útvonalat, ami a felhasználónak visszaad valamit. A get metóduson belül két paraméterünk van, vesszővel elválasztva egymástól. Az első paraméter volt a kezdőoldal / jele, míg a második paraméter ebben az esetben egy "névtelen" függvényhívás, amely egyetlen return utasítással rendelkezik. A return utasítás egy view-val, vagyis nézettel fog visszatérni a felhasználói kérésre válaszként. A view metódus az egy Laravel-es segédfüggvény (helper), ennek paraméteréül kell adni a visszaadandó nézet nevét. Amit ide beírunk, akkor azt a keretrendszer a mappaszerkezetben a resources/views mappában fogja keresni és ha megtalálja, visszaadja a felhasználó böngészőjének eredményül. Nézzük meg, hogy a welcome nézetet keressük az útvonalnál, a resources/views mappában pedig ott van a welcome.blade.php fájl. Ennek a php kiterjesztésű fájlnak nagyobbik része "sima" HTML és CSS kód, megspékelve Blade specifikus elemekkel. A Blade template-ről fogunk tanulni a későbbiekben, egyelőre legyen elég annyit tudni, hogy minden általunk definiálni kívánt nézet fájlhoz (welcome, about, contact, vagy bármi egyéb nevet találunk ki) írjuk oda "kiterjesztésként", hogy blade.php, és ekkor működni fog a keretrendszerünk. Ha a welcome.blade.php fájlban módosítjuk a kódot (82. sorban írjuk át a "Laravel"-t "My first Laravel App"-ra), majd mentsük el és frissítsük a böngészőben a http://127.0.0.1:8000/ weboldalunkat (ha nem töltődik be, akkor valószínűleg nem indítottuk el az alkalmazás kiszolgálását a php artisan serve paranccsal). Eredményül ezt kapjuk:

Definiáljunk most mi magunk egy új útvonalat. Az egyszerűség kedvéért lemásolhatjuk a már meglévő utasítást és azt a beillesztés után már módosíthatjuk.

Route::get('/contact', function () {
  return view('contact');
});


Itt egy kapcsolati oldalt szeretnénk elérni majd, ha a böngészőbe beírjuk ezt: http://127.0.0.1:8000/contact

Ezt meg is tehetjük és lekérhetjük az útvonalat a böngészőben, amivel egyben rávilágítunk a Laravel még egy nagyon fontos előnyére, mégpedig a nagyon részletes hibajelentés visszakapásra, egy részlet belőle:

Elsőre talán rémisztőnek tűnhet, de a későbbiekben (is) nagyon hasznos lesz ez nekünk. Itt a bal felső részen látható hibaüzenet hordozza a legtöbb információt, most arra világít rá nekünk, hogy bár az útvonal (/contact) létezik, de nem található hozzá a resources/views mappában hozzá contact.blade.php nevű nézet fájl. Úgyhogy hozzuk ezt létre ott és írjunk is bele egy szöveget, hogy lássuk, tényleg elértük azt az útvonalat és megfelelően kiszolgálásra is került a felhasználó kérése.

<h1>Ez egy kapcsolati oldal.</h1>


Most még nem annyira figyelve a megfelelő szabványokra, csak egyetlen h1 címsoros kiíratást hajtsunk végre benne. Mentsük el és ha frissítünk a böngészőben, akkor most már ténylegesen a visszakapott nézetet láthatjuk. Így néz ki az én böngészőmben:

Kicsit kényelmetlen beírni a contact oldal útvonalát a böngészőbe, úgyhogy a welcome.blade.php -ban csináljunk rá egy linket, amivel át tudunk lépni erre az oldalra. Az welcome.blade.php oldal alján lévő linkek közül egyet másoljunk le, illesszük be és módosítsuk így:

<a href="/contact">Contact</a>


Ha a kezdőoldalon a linkre kattintunk, akkor az szerencsére ténylegesen átvisz minket a contact oldalra. Vissza még nem tudunk menni és semmi egyéb, de majd a későbbiekben még alakítjuk ezt úgyis...

Ha véletlenül mondjuk elírjuk a "href" részben az útvonal nevét, például így: /contac (lefelejtjük a végéről a t betűt) és úgy akarjuk elérni a böngészőben a contact oldalt a welcome linkjén keresztül, akkor 404-es hibakódot kapunk. A Laravel keretrendszer biztosít a számunkra szép, design-os nézeteket a leggyakoribb hibakódokhoz. Ezeket a nézeteket felül is lehet majd definiálni és saját, csinos hibakód oldalakat is létrehozhatunk, de ne rohanjunk most még ennyire előre...

Fontos megjegyezni még, hogy ez most még csak egy egyszerűsített útvonal bejárás volt, hiszen a felhasználó elindította a kérést, a - remélhetőleg - regisztrált útvonal címét beírva, a routes/web.php fájlból kikereste a keretrendszer az útvonalat, majd a visszatéréseként a megfelelő nézetet elküldte a felhasználónak. Egy nagyobb rendszernél már a kéréskiszolgálások komplexebbek lesznek, érintheti a következőket: regisztrált útvonal elérése, Controller fájl megfelelő metódusa, a Model fájl(ok) üzleti logikai részének alkalmazása, esetleg a Model(ek) segítségével adatok letöltése az adatbázisból, a Controller-en keresztül az eredmény kalkulációk vagy adatok visszaadása a View fájlnak és úgy a felhasználó böngészőjének.

Ne feledjétek, az alkalmazás fejlődésének nyomon követését a Github-on is megtehetitek itt: https://github.com/gludovatza/myfirstsite A friss módosítások ennek a commit-nek lettek a részei: Routing 1. rész