Meztelen Zend_Layout és Zend_View
Ebben a cikkben ránézek használ Zend_Layout és Zend_View mellett egy egyszerű front kontroller, hogy hogyan lehet elindítani elválasztó üzleti logikát és a prezentáció keretében az alkalmazás. Minden kódot elérhető GitHub:
Meztelen Zend_Layout és Zend_View GitHub .
MVC
A közös tervezési minták a modern webes alkalmazások az MVC. A Zend Framework a "teljes stack" üzemmód az egyik megvalósítása MVC PHP és három részből áll:
- Modell (M)
- Nézd meg (V)
- Controller (C)
A minta célja, hogy az üzleti és a megjelenítési logika teljesen elválasztva egymástól (az üzleti logika a modell, és megjelenését a nézet), és a vezérlő ül a közepén végzett a "zenekar".
Bemutatás és logika
A Zend Framework meg kezelnek két fő összetevőből áll: Zend_View és Zend_Layout. Zend_Layout, mint a neve is mutatja gondozza az elrendezés szempontjából a terület (általában fejléc, lábléc, sidebars, stb.) Zend_View fókuszál bemutató adatokat, hogy a modell előállításán dolgozik, vagy abból.
Mivel a fejlesztők, és alkalmazásaik, fejlődni hajlamosak vagyunk mozoghat különböző szakaszaiban, általában minden javulást jelent a korábbi, javítása karbantarthatóság és bővíthetőség. Az egyik fő kérdés az, hogy bemutatása és a logika még mindig keveredik és nem egyszerű elindítani elválasztja a két.
Mi a baj a keverő a kettő?
Van néhány ok, amiért keverésével különböző részein az alkalmazás, például egy tervező dolgozik a helyszínen nem akar (vagy a tudás) a vizsgálat körül kódot próbál dolgozni, hol, hogy a bemutató változtatásokat. Azonos módon a fejlesztők (ha te, mint én, aki a tervezési szakértelem, a strucc), akkor tör ki a hideg veríték, amikor említést tervezés és UI munkát.
Továbbá mi van, ha később szeretné bemutatni a helyszínek különböző médiumok, mint például a mobiltelefonok, tablet PC-k, vagy tegye ki az adatokat az interneten keresztül történő szolgáltatások (XML / JSON / stb)? Miután vegyes bemutató és logikai állsz szinte semmi remény nélkül nagyon csúnya hack, hogy húzza ki a bemutató vissza a kódot, a befecskendezés előtt valami új. Ha az adatok és bemutatása lett elválasztva, hogy ezeket a változásokat szinte triviális, hozzon létre egy új nézetet szkriptet az új formátumot és a közvetlen megkeresések szükség.
Választva a két
Egy változó kérelmet a nem mindig gazdaságos végrehajtásának megkezdése a teljes MVC megoldást, és a kérelmet le kell migrálni lassan - néha futó régi kódot, párhuzamosan az új. Azt talán, hogy vannak tömegek a logika (például adatbázis-kapcsolat beállítása, hitelesítés, cookie-kezelés, stb), hogy nem állnak készen az öntvény, hogy a kiválasztott keret beállítása, tehát a régi és ismert-to-be-kód működik továbbra is lehet alkalmazni addig, amíg meg lehet újraírni / refactored.
Megjegyzés: A Zend_Layout és Zend_View mint ez tökéletesen elfogadható a Zend Framework táj és a keretet úgy tervezték, hogy az egyes összetevők nélkül is használható a többi a keret. Nagy előnye a változó alkalmazások és valószínűleg az egyik fő oka a magas elterjedését a vállalati alkalmazásokhoz.
Front Controller
A következőkben szeretném létrehozni egy front kontroller - egyetlen fájl célja, hogy vegye fel a kéréseket, amelyek nem illeszkednek a fájl a fájl-rendszer. Ez gyakran alkalmazásával érhető el. Htaccess fájlt, mint például az egyik alkalmazott az alapértelmezett Zend Framework telepítése. Belül az első vezérlő leszek felállítása mi elrendezés és nézd meg, és bemutatja, ahol a különböző részei a kérelem csúszik bele.
define ('APP_PATH ", dirname (__FILE__).'/..'); / / Start pufferelés kimenet ob_start (); / / Létrehozunk egy Zend_View példány Zend_Layout:: startMvc (); $ layout = Zend_Layout:: getMvcInstance (); $ layout-> setLayoutPath (APP_PATH. "/ layout / scripts ') -> setViewSuffix (" phtml') -> setLayout ("index"); $ view = $ layout-> getView () -> setScriptPath (APP_PATH. "/ nézet / scripts ') -> addHelperPath (APP_PATH. "/ könyvtár / Zend / Nézet / Helper", "Zend_View_Helper'); / / Ha Base URL - ok * * szinte meztelenül, de nem kell ezt! Zend_Controller_Front:: getInstance () -> setBaseUrl ($ _SERVER ['HTTP_HOST']); try {/ ** * Végezzen alkalmazása útvonal ... * - Lehet, hogy ezzel a front kontroller és irányításában az összes kérés * ezen keresztül egy fájlt (feltéve fájl nem létezik a fájlrendszeren * - Megjegyzés: a módszer az alábbi igazán csak a demonstrációs lenne * szörnyű nagy site * / switch ($ _GET ['oldal']) {case "index": case "kivétel": $ pageName = $ _GET ['oldal']; break; alapértelmezett: $ pageName = false; break;} / / Példa oldal nem található ... if (false === $ pageName) {$ responseHeader = 'HTTP/1.1 404 Az oldal nem található "; dobja az új kivétel (" Az oldal nem található ");} / ** * Új adatokat a Tekintettel cél itt * Lehet, hogy a saját vezérlő végrehajtása, illetve néhány kép is, ahol az üzleti logika * részben elkülönül kilátás logika * / $ view-> megjelenítendő szöveg = 'Hello Lloyd', $ view-> buttonText = 'I \' m nem aktív! '; $ layout-> content = $ view-> render ("{$ pageName}. phtml"); echo $ layout-> render ();} catch (Exception $ e) {/ / Tisztítsa ki már pufferelt tartalmát - nem akarjuk megjeleníteni, hogy az! ob_clean (); if (! isset ($ responseHeader)) {$ responseHeader = 'HTTP/1.1 500 Internal Server Error ";} header ($ responseHeader); $ view-> kivétel = $ e, $ layout-> content = $ view-> render ('error.phtml'); echo $ layout-> render ();}
Először is kezdjük kimenet-pufferelés, az ezt tudjuk meg a fejléc bármely pontján a kérelmet, és tudom, hogy lehetséges, hogy küldje el. Amennyiben kivételt kell dobni bármely szakaszában a kódfuttatást is tiszta ez a puffer, és írja ki vagy hiba üzenet tartalmát és elrendezését. Ez biztosítja, hogy mi nem nyilvánít része megjelenített tartalmát hibákat tartalmazó hogy a végfelhasználó.
Következő új MVC példánya Zend_Layout keletkezett, és azt mondja, hogy ki elrendezés szkriptek kiterjesztése phtml, meg lehet találni a könyvtárban kívül az állami út, és hogy mi az alapértelmezett elrendezés hívják index (. Phtml). Az elrendezés is, majd vonjuk ki a nézet objektumot (amihez meg adatainkat kell bemutatni), és alkalmazzák hasonló beállítás.
Ezután állítsa be a nézet objektumot való hivatkozással az alapértelmezett Zend_View segítők. Nézd segítők a készletek további kényelmi funkciók. Ha például azt írja ki egy úszót a monetáris formában, vagy hoz létre a zebra csíkos tábla (lehet őket olvasni itt ). Kiterjesztésével Zend_View_Helper_Abstract és kiegészítve a saját könyvtár ezen a ponton, hogy lehet használni a saját alkalmazás céljából segítők.
A többi alkalmazás kódját most csomagolva egy try {} {} blokk elkapni. Ha valamit dobni egy kivételt uncaught tudjuk fogni és megjeleníteni egy szép hibaüzenetet, hogy a végfelhasználó.
Az első feladat a try {} {} fogás az, hogy útvonalon kérésünkre, mit akar a felhasználó látni? Itt már végre néhány nagyon egyszerű demonstrációs kódot, ahol megnézem az érték a "lap" get változó. Útválasztási lehet nagyon sokkal összetettebb. Az útvonal a hívtuk, amit valaha is kódot kell végrehajtani, hogy / kezelni által szolgáltatott adatok a felhasználó és a rendszer, hogy elmondja, milyen nézet (és esetleg elrendezés script) használata.
Végső soron, ha a router nem egyezik oldalon azt határozza meg a 404-es kódot, és megjeleníti egy szép oldal nem található üzenet a végfelhasználó. Itt dobjuk és a fogást a saját kivétel (és egy nagyon általános kivételt, hogy az), de valószínűleg akkor lenne dobta saját kivételt belül a router-kód.
Egyszer már sikeresen vezetni kérésünkre tudunk kezdeni valamit csinálni a kóddal. Lehet, hogy van saját szabályzók / modellek végre, vagy ha egy kis kódot, ami már külön valamelyest. Itt meg egy pár egyszerű változók a nézet objektumot.
Amint ez elkészül egyszerűen teszik a nézeteit adataink. Ha a kód dob egy kivételt uncaught bármilyen okból ez csapdába alján a forgatókönyvet. Itt egyértelműen a már pufferelt kimenet, meg egy 500 válasz fejléce, és mondd meg mi kérelmet, hogy elvegye a "hiba" nézet script (ami általában sokkal lecsupaszított változata a normál elrendezés / nézet és naplózza a hiba ellenőrzésére később).
Mivel a nézet teszi az első és befecskendezni az elrendezés meg lehet változtatni az elrendezést belül a véleményen van, és igenis szükséges extrák, például,
- Az oldal címe
- Metatagek
- Scripts (URL-ek vagy kód) a <head> szakasz
- Add további stílusok, stb.
Emellett az is lehetséges, hogy változtatni az egész elrendezést a nézet segítségével ...
<? Php $ this-> elrendezés () -> setLayout ("alternativeLayout ')?> ..., Ahogy és amikor szükséges.
Végül ...
Remélem, ez már hasznos bevezetést Zend_Layout és Zend_View és ez lehetővé teszi, hogy végrehajtásának megkezdése a saját alap MVC és javítja a maintainibility / nyújthatósága a kód. Kérjük, vessen egy pillantást a forráskód példák használata (lásd a README fájlt utasításokat).
A kód azt feltételezi, hogy már van autoloadinggal működik (vagy ha szerepel a szükséges osztályok). Ezen kívül, én nem ajánlom, hogy az útvonal vagy az adatok beállítása, mint említettem, ez nagyon leegyszerűsítve bemutató. Hogy a teljes kódot vessen egy pillantást a forráskódot kapcsolódik a tetején ezt a cikket.
A Zend Framework: 1.10.6


















































Jól megírt, és a legtöbb információt, köszönöm!