Zend_Layout Naked u Zend_View

Permezz Watkin Lloyd Steven , it-Tlieta 10 awissu, 2010 23:47

F'dan l-artikolu I ħarsa lejn jużaw Zend_Layout u Zend_View flimkien ma 'kontrollur quddiem sempliċi biex turi kemm huwa possibbli li tibda separazzjoni loġika kummerċjali u l-preżentazzjoni ġewwa l-applikazzjoni tiegħek. Kull kodiċi huwa disponibbli fuq GitHub:
Zend_Layout Naked u Zend_View fuq GitHub .

MVC

A komuni mudell disinn għall-applikazzjonijiet web moderna huwa l-mudell MVC. Il- Qafas Zend b'mod sħiħ munzell "mode" hija waħda implimentazzjoni ta 'MVC fil PHP u tikkonsisti minn tliet partijiet:

  • Mudell (M)
  • View (V)
  • Kontrollur (C)

Il-mudell huwa mfassal b'tali mod li n-negozju u l-loġika preżentazzjoni huma kompletament separati minn xulxin (bil-loġika tan-negozju fil-mudell, u l-preżentazzjoni fil-fehma) u l-kontrollur seduta fin-nofs twettiq tal-"orkestra".

Preżentazzjoni u Logic

Fil-Qafas Zend l-opinjoni tiġi ttrattata mill-żewġ komponenti ewlenin: Zend_View u Zend_Layout. Zend_Layout kif tissuġġerixxi l-isem jistenna wara l-aspett tqassim tas-sit (ġeneralment headers, footers, sidebars, eċċ). Zend_View ċċentrata fuq tippreżenta id-data li mudell tiegħek ilha taħdem biex jipproduċu jew ġejjin.

Bħala żviluppaturi, u l-applikazzjonijiet tagħhom, jevolvu għandna t-tendenza li jiċċaqilqu permezz istadji varji, ġeneralment kull titjib fil-preċedenti, mantenibilità titjib u estensjoni. Waħda mill-kwistjonijiet prinċipali hija li l-preżentazzjoni u l-loġika xorta jiksbu intermingled u sempliċi biex ma tibda tissepara l-tnejn.

X'hemm ħażin ma taħlit-tnejn?

Ostrich Hemm bosta raġunijiet għaliex it-taħlit partijiet differenti tal-applikazzjoni, per eżempju disinjatur ħidma fuq is-sit tiegħek ma tista 'tixtieq li (jew ikollhom l-għarfien) li scan madwar fil-kodiċi jippruvaw ix-xogħol fejn jagħmlu bidliet preżentazzjoni. Bl-istess mod l-iżviluppatur (jekk int bħali li għandha l-ħiliet disinn ta 'ngħam) jista break out fl-għaraq kiesaħ meta inti ssemmi disinn jew xogħol UI.

Barra minn hekk jekk dak aktar tard inti tixtieq tippreżenta siti tiegħek fuq midja differenti, bħal telefowns ċellulari, tablet PCs, jew li jesponu l-informazzjoni permezz ta 'servizzi tal-web (XML / JSON / etc)? Wara preżentazzjoni mħallta u loġika inti toqgħod kważi l-ebda tama mingħajr xi hacks ferm ikrah biex tiġbed l-preżentazzjoni lura mill-kodiċi tiegħek, qabel ma tinjetta xi ħaġa ġdida. Jekk id-data u l-preżentazzjoni ġiet mifruda tagħmel dawn il-bidliet huma kważi wieħed trivjali, joħolqu b'kitba fehma ġdida għall-format il-ġdid u t-talbiet diretti kif xieraq.

Tissepara l-żewġ

Fl-applikazzjoni li qed tevolvi mhux dejjem ekonomiku tagħha li tibda timplimenta soluzzjoni MVC sħiħa u l-applikazzjoni jeħtieġ li jkun emigra bil-mod - kultant taħdem kodiċi qodma b'mod parallel ma ġodda. Huwa forsi li hemm mases ta 'loġika (bħal setup konnessjoni database, awtentikazzjoni, it-tqandil cookie, eċċ) li ma jkunux lesti għall-iffurmar għall magħżul oqfsa tiegħek setup, għalhekk kodiċi qodma u magħrufa biex jiġu-xogħol tista' tkompli tiġi użati sakemm ikun jista 'jerġa' jinkiteb / refactored.

Nota: Zend_Layout użu u Zend_View bħal dan huwa perfettament aċċettabbli fi ħdan il-pajsaġġ Qafas Zend u l-qafas ġie ddisinjat b'tali mod li komponenti individwali jistgħu jintużaw mingħajr il-bqija tal-qafas. Vantaġġ kbir fl-applikazzjonijiet jevolvu u probabilment waħda mir-raġunijiet ewlenin għall-adozzjoni għolja tiegħu fl-applikazzjonijiet intrapriża.

Front Kontrollur

Hawn taħt I jinħoloq kontrollur quddiem - fajl wieħed biss iddisinjati sabiex jittellgħu kull talba li ma jkunx imqabbel għal fajl fuq il-fajl tas-sistema. Dan huwa sikwit jinkiseb bl-użu ta Htaccess. Bħal dak użat fil-kontumaċja Zend Qafas tinstalla. Fi ħdan il-kontrollur ta 'quddiem se nkun twaqqif tqassim tagħna u fehma u li juru meta l-partijiet differenti tal-karta applikazzjoni fih.

 jiddefinixxi ("APP_PATH", dirname (__FILE__)'/..'); / / Bidu mewwieta output ob_start (); / / Oħloq Zend_Layout istanza Zend_View:.: startMvc (); tqassim $ = Zend_Layout:: getMvcInstance (); $ setLayoutPath tqassim-> (APP_PATH "/ tqassim / skripts".) -> setViewSuffix ("phtml") -> setLayout ("indiċi");. $ ħsieb = getView $ tqassim-> () -> setScriptPath (APP_PATH "/ / skripts għan ") -> addHelperPath (APP_PATH." / library / Zend / View / helper "," Zend_View_Helper "); / / Set Base URL - * ok * kważi mikxufa, imma inti m'għandekx bżonn dan!  Zend_Controller_Front:: getInstance () -> setBaseUrl (_SERVER $ ["HTTP_HOST"]); jippruvaw {/ ** * Wettaq xi applikazzjoni rotta ...  * - Jista 'jkun jużaw dan bħala kontrollur ta' quddiem u direzzjoni kollha * talbiet kollha permezz ta dan il-fajl wieħed (sakemm fajl ma teżistix fil-fajl sistema * - Innota l-metodu hawn taħt hija biss verament għal dimostrazzjoni, ikun * horrible ma 'sit kbir * / swiċċ ($ ["paġna"] _GET) {"indiċi" każ: il-każ "eċċezzjoni": $ pageName = $ ["paġna"] _GET; waqfa; default: $ pageName = foloz; waqfa;} / / Eżempju ta ' paġna ma tkunx sabet ... jekk (falza === $ pageName) {$ responseHeader = "HTTP/1.1 404 Page Not Found"; tarmi Eċċezzjoni ġdida ("Paġna ma Found");} / ** * Żid data lill tiegħek ħsieb oġġett hawn * Inti jista 'jkollok implimentazzjoni tiegħek kontrollur stess jew xi tinkludi fajls * fejn loġika tan-negozju hija parzjalment mifruda mill * loġika fehma / displayText $ għan-> = "Hello minn Lloyd"; buttonText $ għan-> = "I \" m mhux attivi ';! kontenut $ layout-> = tirrendi $ għan-> ("{$ pageName} phtml."); eku jirrendu $ tqassim-> ();} qabda (Eċċezzjoni $ e) {/ / Nadif fl diġà buffered kontenut - ma rridux li juri li ob_clean (); jekk (isset ($ responseHeader)!) {$ responseHeader = "HTTP/1.1 500 Intern Server Error";} header ($ responseHeader); $ eċċezzjoni għan->! = $ e; kontenut $ layout-> = tirrendi $ għan-> ('error.phtml "); eku jirrendu $ tqassim-> ();} 

L-ewwelnett nibdew lqugħ produzzjoni, billi tagħmel dan nistgħu stabbilit headers tagħna fi kwalunkwe punt fit-talba u jafu li huwa possibbli li jibagħtuhom. Jekk eċċezzjoni jiġu mitfugħa fi kwalunkwe stadju ta 'l-eżekuzzjoni kodiċi aħna nadif dan in-newtralizzant u jiktbu jew messaġġ ta' żball kontenut u t-tqassim. Dan jiżgura li aħna ma jwasslux il-parti mogħtija kontenut li fihom żbalji lill-utent aħħari.

Li jmiss istanza MVC ġdida ta 'Zend_Layout hija ġġenerata u aħna għid li minn skripts tqassim jkollhom l-phtml estensjoni, jinsabu fid-direttorju ta' barra tal-passaġġ pubbliku, u li l-firxa default tagħna huwa msejjaħ indiċi (. Phtml). Mill-tqassim aħna mbagħad estratt l-oġġett ħsieb (li aħna sett tad-data tagħna li għandhom jiġu ppreżentati) u tapplika s-setup simili.

Next we setup l-oġġett fehma b'referenza għall-helpers default Zend_View. helpers View huma settijiet ta 'funzjonalità konvenjenza addizzjonali. Per eżempju, bil-miktub fl float fil-format monetarja, jew toħloq strixxat tabella zebra (dawn jistgħu jinqraw madwar hawn ). Bl-estensjoni Zend_View_Helper_Abstract u żżid librerija tiegħek f'dan il-punt possibbli tiegħu li juża helpers tiegħek ħsieb applikazzjoni.

Il-bqija tal-kodiċi applikazzjoni hija issa mgeżwra jipprova {} {} qabda blokk. Jekk xejn tarmi eċċezzjoni uncaught nistgħu qabda u juri messaġġ ta 'żball sbieħ li l-utent aħħari.

ewwel ħidma tagħna fi ħdan il-qabda tipprova {} {} huwa li rotta talba tagħna, dak ma l-utent trid tara? Hawnhekk stajt implimentati xi kodiċi ta 'dimostrazzjoni sempliċi ħafna fejn I jivverifika l-valur tal-paġna' nikseb varjabbli. Tiegħek rotta jistgħu jkunu ħafna aktar kumplessi. Il-rotta tkun jintuża għas-sejħiet dak li qatt kodiċi jeħtieġ li titwettaq biex tikseb / jittrattaw data pprovduta mill-utent u li tgħid-sistema liema għan (u b'kitba tqassim possibilment) għall-użu.

Fl-aħħarnett jekk router tagħna ma taqbilx ma 'kull paġna hija tistabbilixxi kodiċi ta' rispons 404 u displays paġna sbieħ ma sabet messaġġ lill-utent aħħari. Hawnhekk, irridu tarmi u l-qabda eċċezzjoni tagħna stess (u għal eċċezzjoni ġeneriċi ħafna f'dak) iżda probabbilment inti'd tkun jitfg eċċezzjoni tiegħek minn ġewwa l-kodiċi router.

Ladarba We've b'suċċess mwassla talba tagħna nistgħu nibdew nagħmlu xi ħaġa bil-kodiċi. Jista 'jkun li inti għandek kontrolluri tiegħek / mudelli implimentati jew inti jinkludu xi kodiċi dak li diġà ġew separati kemmxejn. Hawnhekk I sett ta 'koppja ta' varjabbli sempliċi għall-oġġett opinjoni.

Ladarba dan huwa kompletat aħna sempliċiment jagħmlu l-opinjonijiet ma 'informazzjoni tagħna. Jekk il-kodiċi throws eċċezzjoni uncaught għal xi raġuni dan huwa maqbuda viċin il-qiegħ ta 'l-iskrittura. Hawnhekk aħna ċari diġà buffered produzzjoni, stabbilit header rispons 500, u għid applikazzjoni tagħna sabiex tirrendi iskrittura-fehma tal-"żball" (li ġeneralment hija verżjoni ħafna imqaxxar fl tat-tqassim normali / ħsieb u zkuk l-iżball għall-iċċekkjar aktar tard).

Peress li l-fehma hija mogħtija l-ewwel u injettati fil-format huwa possibbli li jibdlu l-format minn ġewwa l-opinjoni, u tabilħaqq stabbiliti ekstras meħtieġa, per eżempju,

  • titolu Page
  • Meta tags
  • Skripts (URLs jew kodiċi) fit-taqsima <head>
  • Żid stili addizzjonali, eċċ

Barra minn hekk tiegħu anki possibbli li jibdlu l-format kollu minn ġewwa l-ħsieb bl-użu ...

  tqassim () <PHP $ dan il-?> -> setLayout ("alternativeLayout")>? 

... Kif u meta meħtieġ.

Fl-aħħarnett ...

Nispera li dan kien introduzzjoni utli li Zend_Layout u Zend_View u se jgħinuk biex tibda timplimenta MVC bażiċi tiegħek stess u jtejbu l-maintainibility / estensibilità tal-kodiċi tiegħek. Jekk jogħġbok agħti ħarsa lejn il-kodiċi sors għall-eżempji ta 'użu (ara l-fajl README għall-istruzzjonijiet).

Il-kodiċi jassumi li inti stajt diġà kisbu autoloading jaħdmu (jew ikollok inklużi l-klassijiet meħtieġa). Barra minn hekk, jiena ma nirrakkomandaw li timplimenta l-rotta jew id-data setting kif hawn fuq, dan huwa ferm simplifikat għall dimostrazzjoni. Biex tara l-kodiċi sħiħ tagħti ħarsa lejn il-kodiċi sors marbuta fil-quċċata ta 'dan l-artikolu.

Zend verżjoni Qafas: 1.10.6

One Response to "Zend_Layout Naked u Zend_View"

  1. Andy says:

    Ukoll bil-miktub u l-aktar informattiv, grazzi!

Leave a Reply













Tema Panorama minn Themocracy

6 viżitaturi online issa
3 mistednin, 3 bots, 0 membri
viżitaturi llum Max: 13 fi 11:17 UTC
Dan ix-xahar: 26 fil 2011/07/05 12:35 UTC
Din is-sena: pm UTC 130 fil 28-03-2011 10:40
Il-ħin kollu: pm UTC 130 fil 28-03-2011 10:40