A Laravel számos beépített funkcióval érkezik, ezt Composer segítségével parancssori felületen keresztül telepíthetjük. A Laravel számos parancssori támogatást is tartalmaz, melyek a php artisan console segédprogrammal használhatók, mely szintén a Laravel telepítésekor települ. A parancssoros felületen keresztül létrehozhatók modellek, controllerek vagy alap view template-ek, ezzel jelentősen felgyorsítva a fejlesztés folyamatát.
Az MVC minta talán az első tervezési minta. A nevét a három fő komponensének nevéből kapta:
- Model (magyarul modell): Az adatokat kezelő, vagyis tulajdonképpen az üzleti logikát megvalósító réteg. Ez felel az adatok tárolásáért, visszaolvasásáért. Itt foglalnak helyet azok a függvények is, amik műveleteket végeznek az adatokon. Része az adatbázis is.
- View (magyarul nézet): A felhasználói felület megjelenítéséért, a felhasználó különféle nyűgjeinek a Vezérlő felé továbbításáért felelős réteg. Itt jelennek meg a felhasználó számára a vezérlőelemek, a felhasználónak szánt adatok megfelelő formában való megjelenítése is itt történik.
- Controller (magyarul vezérlő): Ez a réteg a vezérlőelemek eseményeinek alapján meghívja a modell megfelelő függvényeit, illetve, ha a megjelenítésben érintett adatok változnak, akkor erről értesíti a Nézetet.
View
A Laravel keretrendszer egy egyszerű és hatékony templating engine-nel rendelkezik, a Blade-del. Az alap felfogás, hogy a view réteget a lehető leginkább válasszuk el a többi rétegtől, így gyakorlatilag egy szimpla html kódot írunk a megjelenített view-k esetében, és ezek dinamikus részein Blade tag-eket teszünk ki, így érjük el controller rétegtől kapott adatokat.
A Blade támogatja a html felületek öröklését, bizonyos szekciók meghívását, így a felületek elemeit elég egyszer megírni, és a későbbiekben ezeket csak meg kell hívni a különböző beépített Blade tag-ekkel.
- @section: az örökölt layout file-ban definiált (@yield) szekciót helyettesíti ide, csak az itt megadott tartalmat írja bele
- @yield: később ezt a layout-ot megoroklő blade file-okban megadott tartalom (@section) ide kerül behelyettesítésre
- @extends: ezzel a tag-gel örököltethetünk le layoutot az éppen szerkesztett view-hoz
Controller
A controllerek feladata a felhasználói interakciók alapján különböző adatok beolvasása, illetve átadása bizonyos felhasználói felületeknek megjelenítésre.
A controllerek rétegében történnek a backend szintű adatvalidációk, illetve innen indulnak az adatbázisműveletek is, melyeket a model réteg fog implementálni. A controller kaphat adatot a felhasználótól és kaphat a model rétegtől. Az adatokkal végezhet műveleteket de végül átadja a vezérlést egy nézetnek vagy egy másik metódusnak.
A felhasználótól többféleképpen kaphat egy controller adatot, ezt a Laravel keretrendszer a Route-ok bevezetésével oldotta meg.
A két legfontosabb kommunikációs mód a webszerver és a felhasználó között a GET és a POST requestek. A route felvételekor meg kell adnunk a kommunikáció módját (Route::get), a várt útvonalat (pl.: www.example.com/user/14) és a controllert a feldolgozó metódussal együtt.
A route megadásakor a kapcsos zárójelben jelöltük a változót, amelyet később a controller figyelni fog. Mivel a route-ban megadtuk, hogy az id változót a UserController show metódusa dolgozza fel, így a request egyből ide érkezik, és a User modellen keresztül már el is érjük az adatbázist. Az adatbázis műveleteket a model réteg implementálja, úgyhogy itt elegendő átadni egy függvénynek a keresendő paramétert, ami visszatér a kívánt objektummal.
A controllerekben a return view() parancs arra szolgál, hogy bizonyos view-kat betöltsünk és itt adjuk át a megjelenítendő dinamikus adatokat, amiket a blade változói már fel fognak tudni dolgozni, és meg fognak tudni jeleníteni a felhasználó részére.
Model
A model réteg egyik legfontosabb feladata az adatbázissal történő kommunikáció. Alapvetően, ha egy model neve megegyezik az adatbázis egyik táblájának nevével, akkor az adatbázis műveletek már megtalálják a kapcsolódó adattáblát. Ha nem egyezik meg, akkor a modelben ezt a kapcsolatot meg kell adni.
A Laravel egy egyszerű és hatékony ORM-mel (Object-relational mapping) érkezik, az Eloquent-tel. Az eloquent implementálja az alap adatbázis műveleteket (select, insert, update, delete, stb.), lehetőséget nyújt sql parancsok kézzel történő megadására és a model rétegben a különböző táblák közötti relációk definiálására. A relációk a követkők lehetnek:
- One To One
- One To Many
- Many To Many
- Has One Through
- Has Many Through
- One To One (Polymorphic)
- One To Many (Polymorphic)
- Many To Many (Polymorphic)
Egy reláció úgy implementálható a model rétegben, hogy egy metódust készítünk, melynek visszatérési értéke a kívánt kapcsolat által visszatérő adatok gyűjteménye. Amennyiben a kapcsolat egyértelmű, úgy megtalálja a kapcsolódó mezőket az ORM, viszont kézzel is megadható a függvény további attribútumaiban a kapcsolódó oszlopok nevei.
Források: Tankönyvtár: MVC tervezési minta, https://regi.tankonyvtar.hu/hu/tartalom/tamop425/0038_informatika_Projektlabor/ch01s04.html