Üdv a Composite csapatánál

Telefon: +36 30 484 2226

Az MVC minta - Laravel

Az MVC minta - Laravel

2020.11.28 16:27
Szerkesztő: Támba Bence

A Laravel egy php nyelven írt open-source keretrendszer, ami Model-View-Controller (MVC) tervezési mintára alapul.

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:

  1. 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.
  2. 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.
  3. 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.

  1. @section: az örökölt layout file-ban definiált (@yield) szekciót helyettesíti ide, csak az itt megadott tartalmat írja bele
  2. @yield: később ezt a layout-ot megoroklő blade file-okban megadott tartalom (@section) ide kerül behelyettesítésre
  3. @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:

  1. One To One
  2. One To Many
  3. Many To Many
  4. Has One Through
  5. Has Many Through
  6. One To One (Polymorphic)
  7. One To Many (Polymorphic)
  8. 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

Hírlevél