Naked Zend_Layout in Zend_View

Z Steven Lloyd Watkin , v torek, 10. avgust 2010 23:47

V tem članku sem gledati z uporabo Zend_Layout in Zend_View skupaj s preprostim krmilnik spredaj pokazati, kako je mogoče začeti ločuje poslovno logiko in predstavitev v vašo prijavo. Vsa koda je na voljo na GitHub:
Naked Zend_Layout in Zend_View na GitHub .

MVC

Skupno načrtovanje vzorec za sodobne spletne aplikacije je vzorec MVC. Zend okvirni mode v "celotni sveženj" je eden izvajanje MVC v PHP in je sestavljena iz treh delov:

  • Model (M)
  • Poglej (V)
  • Controller (C)

Vzorec je oblikovan tako, da poslovanje in predstavitev logiki so popolnoma ločene ena od druge (s poslovno logiko v model, in predstavitev v pogled) in krmilnik sedel na sredi, ki izvaja "orkester".

Predstavitev in Logic

V Zend okvirnega da je obravnava na dveh glavnih delov: Zend_View in Zend_Layout. Zend_Layout kot že ime pove, skrbi za postavitev vidik mesta (splošno glave, noge, kredenca, etc). Zend_View osredotoča na predstavitev podatkov, ki jih vaš model je delal za proizvodnjo ali pridobitev.

Kot razvijalci, in njihove aplikacije, razvijejo smo vajeni, da se premaknete skozi različne faze, v splošnem vsako izboljšanje v primerjavi s prejšnjo, izboljšanje vzdrževanja in razširljivost. Eno glavnih vprašanj je, da predstavitev in logika se še vedno prepletajo in ne enostavno začeti loči dva.

Kaj je narobe z mešanjem dveh?

Ostrich Obstaja več razlogov, zakaj mešanje različnih delov vloge, na primer oblikovalec delajo na vašem mestu ne želite, da (ali znanja) za skeniranje okrog v kodo poskuša izdelati na kateri si predstavitev sprememb. Na enak način razvijalec (če ste, kot sem jaz, ki ima zasnovo sposobnosti noj) lahko izbruhnejo v hladen znoj, ko si omenil design ali UI dela.

Poleg tega, kaj če je to pozneje bi želeli predstaviti svoje strani na različne medije, kot so mobilni telefoni, tablični računalniki, ali razkrivati ​​podatkov prek spletnih storitev (XML / JSON / etc)? Ob mešani predstavitve in logiko stojiš skoraj nobenega upanja, da bi nekaj zelo grd žaga vleči predstavitev nazaj ven iz kode, pred injiciranjem nekaj novega. Če je bil podatkov in predstavitev ločiti, ki so te spremembe skoraj trivialna, ustvarite nov pogled scenarij za novo obliko in neposrednih zahtev, kot je primerno.

Ločevanje dveh

V razvijajočih se uporabi svoje ni vedno gospodarno začeti izvajati v celoti MVC rešitev in uporabe je treba počasi selili - ponekod staro kodo vzporedno z novimi. Je morda, da so množice logike (na primer zbirko podatkov nastavitev povezave, avtentifikacijo, obravnavo piškotkov, etc), ki niso pripravljeni za oblikovanje za izbrano namestitev okvire, zato se stara in znana-to-je-delovni koda še naprej uporabljajo, dokler se lahko izrazi / refactored.

Opomba: Uporaba Zend_Layout in Zend_View, kot je to povsem sprejemljiva v okvirnem krajine Zend in okvir je zasnovan tako, da se lahko posamezni deli uporabijo, ne da bi ostali okvira. Velika prednost v razvijajočih se aplikacij in verjetno eden od glavnih razlogov za svojo visokim sprejemom v poslovnih aplikacij.

Front Controller

Spodaj sem ustvariti spredaj krmilnik - eno datoteko za pick up vse vloge, ki niso pokrite v datoteko na file sistemu. To se pogosto doseže z uporabo. Htaccess datoteke, kot je bil uporabljen v privzeto Zend okvirnega namestiti. V sprednji krmilnik bom ustanovitev naše postavitev in pogled ter pokaže, kje različne dele vloge zdrs v to.

  define ('APP_PATH ", DIRNAME (__FILE__).'/..');
 / / Start izhoda
 ob_start ();

 / / Ustvari primer Zend_View
 Zend_Layout:: startMvc ();
 $ Zend_Layout postavitev =:: getMvcInstance ();
 $ SetLayoutPath postavitev-> (APP_PATH. "/ Postavitev / skripte")
     -> SetViewSuffix ("phtml")
     -> SetLayout ('indeks');

 $ $ = Pogled postavitve-> getView ()
     -> SetScriptPath (APP_PATH "/ pogled / skripte".)
     -> AddHelperPath (. APP_PATH "/ knjižnica / Zend / View / Helper", "Zend_View_Helper ');

 / / Set Base URL - ok * * skoraj gola, vendar vam ni treba tega!
 Zend_Controller_Front:: getInstance () -> setBaseUrl ($ _SERVER ['HTTP_HOST']);

 try {
     / **
      * Opravite nekaj uporabo poti ...
      * - Je mogoče s tem kot spredaj kontrolorja in usmerjanje vseh zahtev
      * S tem eno datoteko (če datoteka ne obstaja v datotečnem sistemu
      * - Opomba spodnji metodi je res samo za predstavitev, da bi bilo
      * Strašno z velikim stran
      * /
     switch ($ ['stran'] _GET) {
    	 primeru "Indeks":
    	 primeru "izjema":
    		 PageName $ $ = ['stran'] _GET;
    		 break;
    	 default:
    		 $ PageName = false;
    		 break;
     }
     / / Primer strani pa ni bilo mogoče najti ...
     if (lažno === $ pageName) {
         $ ResponseHeader = 'HTTP/1.1 404 Stran ni bilo mogoče najti ";
         vrgel novo Izjema ("Strani ni mogoče najti«);
     }

     / **
      * Dodajanje podatkov vašem mnenju objekt tukaj
      * Morda ste svoje izvajanje upravljavec ali nekaj vključuje tudi datoteke
      * Kjer je poslovna logika je delno ločena od logike pogled
      * /
     $ Pogled-> displayText = 'Hello iz Lloyd';
     $ Pogled-> buttonText = "I \ 'm ni aktiven!;

	 $ Postavitev-> content = $ pogled-> Render (". {$ PageName} phtml");
     echo $ postanejo postavitev-> ();
 } Ulov (Izjema $ e) {
	 / / Čisto iz že buffered vsebine - ne želimo prikazati, da je!
	 ob_clean ();
     if (! isset ($ responseHeader)) {
    	 $ ResponseHeader = 'HTTP/1.1 500 Notranja napaka ";
     }
     header ($ responseHeader);
     $ Pogled-> izjema = $ e;
     $ Postavitev-> content = $ pogled-> Render ("error.phtml");
     echo $ postanejo postavitev-> ();
 } 

Najprej bomo začeli izhod buffering, s tem smo lahko nastavite naše glave na kateri koli točki v zahtevi, in vedo, da je možno, da jih pošlje. Če bi izjema vrgli v kateri koli fazi izvajanje kode smo čisto tem pasu in napišite vsebino ali sporočilo o napaki in postavitev. To zagotavlja, da ne bomo dostaviti del opravljene vsebine, ki vsebujejo napake, do končnega uporabnika.

Naslednja je nova MVC primerek Zend_Layout ustvarila in nam je povedal, da postavitev izvajajo skripte imajo končnico phtml, je mogoče najti v imeniku zunaj javnih poti, in da je naš privzeto postavitev se imenuje indeks (. Phtml). Od postavitve smo nato ekstrakt mnenju predmet (ki smo si jih zastavili za naše je treba predložiti podatke) in se uporabljajo podobne nastavitve.

Naprej setup pogled objekt s sklicevanjem na privzeto pomočnike Zend_View. Prikaži pomočnice so nabori dodatnih funkcionalnosti udobje. Na primer, pisanje iz float v denarni obliki, ali ustvarja zebra črtasto tabelo (lahko jih preberete tukaj ). Z razširitvijo Zend_View_Helper_Abstract in dodal svojo knjižnico na tem mestu možno uporabiti svoje pomočnike namenom uporabe.

Preostanek uporabe kode je sedaj zavita v try {} {} ulova blok. Če bi karkoli vrgel uncaught izjemo moremo ujeti in prikaže lepo sporočilo o napaki do končnega uporabnika.

Naša prva naloga v try {} {} ulov je pot našo prošnjo, kaj si želite videti? Tukaj sem izvedel nekaj zelo preprostih predstavitev kodo, kjer lahko preverim vrednost "strani" dobil spremenljivka. Vaš poti je lahko zelo veliko bolj zapleten. Usmerjanja se uporablja za klic, kaj vse oznaka je treba izvršiti, da bi dobili / ročaj podatkov, ki jih uporabnik in povedati, kaj sistema pogled (in po možnosti postavitve skripta) za uporabo.

Konec koncev, če naš usmerjevalnik ne ustreza nobeni strani, ki ga nalaga 404 odzivne oznake in prikaže lepo stran ni mogoče najti sporočilo, do končnega uporabnika. Tu sva metala in ulov lastne izjeme (in zelo splošne izjeme, da je), ampak verjetno želite metali svoje izjeme od znotraj usmerjevalnika kodo.

Ko bomo uspešno preusmerjen našo zahtevo, da lahko začnejo nekaj narediti s kodo. Mogoče je, da imate svoje nadzornike / modeli izvajajo ali pa so nekaj kode, ki je že nekoliko ločeni. Tukaj sem iz nekaj preprostih spremenljivk pogled predmet.

Ko bo to izvedeno smo preprosto postane mnenj z našimi podatki. Če je koda vrže uncaught izjemo iz katerega koli razloga, je to ujet na dnu scenarij. Tukaj je jasno, da že buffered izhod, je 500 odgovor glavo, in povedal, naša vloga, da postane "napake" Glede skript (ki je na splošno precej razgaljene različica običajne postavitve / pogled in hlodi za preverjanje napak kasneje).

Ker je po mnenju izdana prva in vbrizga v postavitev je mogoče spremeniti postavitev od znotraj pogled, in seveda je potrebno dodatki, na primer,

  • Naslov strani
  • Meta tags
  • Skripte (URL ali koda) v oddelku <head>
  • Dodajanje dodatne sloge, etc

Poleg svoje še mogoče spremeniti celotno postavitev od znotraj pogleda z ...

  postavitev () <php $ to-?> -> setLayout ("alternativeLayout)>? 

... Kot in kadar je to potrebno.

Končno ...

Upam, da je bil koristen uvod v Zend_Layout in Zend_View in se vam bodo omogočile začetek izvajanja svoje osnovne MVC in izboljšanje maintainibility / obsežnosti kode. Prosimo, da si ogledate izvorno kodo za primere uporabe (glej README datoteke za navodila).

Kodo, predpostavlja, da ste že dobili autoloading delajo (ali ste priložili zahtevane razredi). Poleg tega jaz ne bi priporočal, da ga izvajajo usmerjanje ali podatkov, nastavitev, kot zgoraj, je to zelo poenostavljen za dokazovanje. Če želite videti celoten kodo lahko ogledate izvorne kode, povezane na vrhu tega članka.

Zend Framework: 1.10.6

En odgovor na "Naked Zend_Layout in Zend_View"

  1. Andy pravi:

    Dobro napisana in najbolj informativne, hvala!

Leave a Reply













Panorama Tema, ki jo Themocracy

5 obiskovalcev online zdaj
2 gostov, 3 bote, 0 članov
Max Obiskovalcev danes: 15 ob 08:24 UTC
Ta mesec: 26 ob 2011/07/05 12:35 UTC
Letos: 130 28-03-2011 ob 22:40 UTC
Ves čas: 130 28-03-2011 ob 10:40 UTC