Meztelen Zend_Layout és Zend_View

Által Steven Lloyd Watkin , kedd 10 augusztus 2010 23:47

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ő?

Ostrich 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

Az egyik válasz a "Meztelen Zend_Layout és Zend_View"

  1. Andy azt mondja:

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

Hagy egy Válaszol













Panoráma téma Themocracy

8 online látogató jelenleg
5 vendég, 3 botoktól, 0 tag
Max. látogatók ma: 23., 04:19 UTC
Ebben a hónapban: 26., 2011/07/05 12:35 UTC
Ebben az évben: 130 at 28-03-2011 22:40 UTC
Az összes idő: 130 at 28-03-2011 10:40 UTC