Hubad Zend_Layout at Zend_View
Sa artikulong ito tumingin ako sa paggamit Zend_Layout at Zend_View kasama ang isang simpleng controller harap upang ipakita kung paano ito ay posible na simulan ang pagkakahiwalay sa negosyo lohika at pagtatanghal sa loob ng inyong aplikasyon. Lahat ng mga code ay magagamit sa github:
Hubad Zend_Layout at Zend_View sa GitHub .
MVC
Ang isang karaniwang pattern na disenyo para sa mga modernong mga aplikasyon ng web ay ang MVC pattern. Ang Zend Framework mode sa 'full stack' ay isa sa pagpapatupad ng MVC sa PHP at binubuo ng tatlong mga bahagi:
- Model (M)
- Tingnan (V)
- Controller (C)
Ang pattern ay dinisenyo tulad na negosyo at mga pagtatanghal na lohika ay ganap na hiwalay mula sa isa't isa (na may negosyo lohika sa mga modelo, at pagtatanghal sa view) at ang controller upo sa gitna ng pagsasagawa ng "orkestra".
Pagtatanghal at lohika
Sa Zend Framework view ay pagdederekta sa pamamagitan ng dalawang pangunahing mga bahagi: Zend_View at Zend_Layout. Zend_Layout bilang ang pangalan nagmumungkahi asta matapos ang layout aspeto ng mga site (pangkalahatan header, footer, sidebars, atbp). Zend_View focusses sa pagtatanghal ng data na ang iyong mga modelo ay nagtatrabaho upang makabuo o kunin sa.
Bilang mga developer, at ang kanilang mga aplikasyon, evolve dumako kami sa ilipat sa pamamagitan ng iba't-ibang yugto, sa pangkalahatan ng bawat isang pagpapabuti sa nakaraang, ang pagpapabuti ng maintainability at posibilidad na pahabain. Isa sa mga pangunahing isyu ay na ang pagtatanghal na lohika at makakuha pa rin at intermingled nito hindi simpleng upang simulan sa pagkakahiwalay ng dalawa.
Ano ang mali sa paghahalo ng mga dalawang?
Mayroong ilang mga kadahilanan kung bakit ang paghahalo ng iba't ibang bahagi ng application, halimbawa isang designer ang paggawa sa iyong site ay maaaring hindi nais na (o may kaalaman) na i-scan sa paligid sa code sinusubukan na magtrabaho sa labas kung saan gumawa ng mga pagbabago sa pagtatanghal. Sa parehong paraan ng isang developer (kung ikaw ay tulad ng sa akin na ang mga kasanayan sa disenyo ng isang Ostrich) ay maaaring magsimula sa isang malamig na pawis nang banggitin mong disenyo ng UI o trabaho.
Bukod dito ano kung mamaya na nais mong ipakita ang iyong site sa iba't ibang media, tulad ng mga mobile na telepono, tablet PCs, o ilantad ang data sa pamamagitan ng serbisyo sa web (XML / JSON / etc)? Ang pagkakaroon ng mixed pagtatanghal at lohika stand mo halos walang pag-asa na walang ilang tunay pangit hacks sa pull ang pagtatanghal back out ng iyong code, bago injecting isang bagong bagay. Kung ang data at pagtatanghal ay pinaghihiwalay ng paggawa ng mga pagbabago na ito ay halos walang halaga, lumikha ng isang bagong script para tingnan ang bagong format at direct ng mga kahilingan na naaangkop.
Sa pagkakahiwalay sa dalawang
Sa isang umuusbong application nito hindi laging magastos upang simulan ang pagpapatupad ng isang ganap na solusyon MVC application at ang mga pangangailangan upang maging lumipat na dahan-dahan - kung minsan tumatakbo lumang code kahanay sa bagong. Ito marahil na may mga masa ng lohika (tulad ng database koneksyon setup, authentication, cookie handling, etc) na hindi handa na para sa paghubog sa iyong pinili frameworks setup, kaya't gulang at kilala-sa-maging-nagtatrabaho code ay maaring magpatuloy sa ginagamit hanggang tulad ng oras ay maaaring ito ay muling isinusulat / refactored.
Tandaan: Ang paggamit ng Zend_Layout at Zend_View tulad na ito ay ganap na ganap katanggap-tanggap sa loob ng Framework tanawin Zend framework at ang mga ito ay dinisenyo tulad na ang mga indibidwal na sangkap ay maaaring gamitin nang walang ang magpahinga ng ang balangkas. Ang isang malaking kalamangan sa mga umuusbong na mga application at marahil ang isa sa mga pangunahing dahilan para sa kanyang mataas na katalinuhan sa mga aplikasyon ng enterprise.
Front Controller
Nasa ibaba lumikha ako ng isang harap controller - isang solong file na dinisenyo upang kunin ang anumang mga kahilingan na hindi tumugma sa isang file sa file system-. Ito ay madalas na nakakamit ang paggamit ng isang file na. Htaccess tulad ng isa na ginagamit sa ang default Zend Framework install. Sa loob ng harap controller ay ako ay set up ng aming mga layout at tingnan at nagpapakita kung saan ang iba't ibang bahagi ng application slip sa ito.
define ('APP_PATH', dirname (__FILE__).'/..'); / / Simulan buffering output ob_start (); / / Lumikha ng isang halimbawa Zend_View Zend_Layout:: startMvc (); $ Layout = Zend_Layout:: getMvcInstance (); $ Layout-> setLayoutPath (APP_PATH. '/ Layout / script') -> SetViewSuffix ('phtml') -> SetLayout ('index'); $ View = $ layout-> getView () -> SetScriptPath (APP_PATH '/ view / script'.) -> AddHelperPath (. APP_PATH '/ library / admin / View / Helper', 'Zend_View_Helper'); / / Itakda ang URL Base - ok * halos * hubad, ngunit hindi mo na kailangan ito! Zend_Controller_Front:: getInstance () -> setBaseUrl ($ _SERVER ['HTTP_HOST']); subukan { / ** * Gawin ang ilang mga application routing ... * - Puwede ay gamit na ito bilang isang harap controller at nagtutulak sa lahat ng mga kahilingan * Sa pamamagitan na ito sa isang file (file na ibinigay ay hindi umiiral sa file system * - Tandaan ang mga paraan sa ibaba ay lamang ang tunay na para sa pagtatanghal, ay ito ay * Kilabot na may isang malaking site * / lumipat ($ _GET ['pahina']) { 'Index' kaso: 'Exception' kaso: $ PageName = $ _GET ['pahina']; break; default na: $ PageName = false; break; } / / Halimbawa ng isang pahina ay hindi natagpuan sa pagiging ... kung (false === $ pageName) { $ ResponseHeader = 'HTTP/1.1 404 Hindi Natagpuan ang Pahina'; ihagis bagong Exception ('Page hindi Found'); } / ** * Magdagdag ng mga data sa iyong mga object view dito * Ikaw ay maaaring magkaroon ng iyong sariling controller pagpapatupad o ang ilang mga Kabilang dito ang mga file * Kung saan negosyo na lohika ay bahagyang separated mula sa view ng lohika * / $ View-> displayText = 'Hello mula Lloyd'; $ View-> buttonText = 'I \' m hindi aktibo '!; $ Layout-> nilalaman = $ view-> render (". {$} PageName phtml"); echo $ layout-> render (); } Catch (Exception $ e) { / / Clean out na buffered nilalaman - hindi namin nais na ipapalabas na! ob_clean (); kung (! isset ($ responseHeader)) { $ ResponseHeader = 'HTTP/1.1 500 Internal Server Error'; } header ($ responseHeader); $ View-> exception = $ e; $ Layout-> nilalaman = $ view-> render ('error.phtml'); echo $ layout-> render (); }
Una namin simulan ang output buffering, sa pamamagitan ng paggawa na ito maaari naming set ang aming mga header sa anumang punto sa mga kahilingan at alam na ito ay posible na magpadala sa kanila. Dapat exception isang bumalibag sa anumang yugto ng pagpapatupad ng code namin malinis ito buffer at isulat o mensahe ng error na nilalaman at layout. Tinitiyak nito na hindi kami naghahatid ng bahagi nai-render na nilalaman na naglalaman ng mga error sa gumagamit dulo.
Susunod na ng isang bagong halimbawa ng MVC Zend_Layout ay binuo at sabihin namin ito na out layout scripts may extension phtml, ay na matatagpuan sa isang direktoryo sa labas ng pampublikong landas, at na ang aming mga default na layout ay tinatawag na index (. Phtml). Mula sa mga layout namin pagkatapos kunin ang view bagay (na kung saan namin inilagay ang aming data upang iharap) at mag-aplay katulad na setup.
Susunod na kami setup ang view bagay na may isang reference sa mga katulong default Zend_View. Tingnan ang mga katulong ay mga set ng mga karagdagang convenience functionality. Halimbawa, ang pagsusulat ng isang lumutang sa pera na format, o paglikha ng isang zebra guhitan table (sila ay maaaring basahin ang tungkol dito ). Sa pamamagitan ng pagpapalawak Zend_View_Helper_Abstract at pagdaragdag ng iyong sariling library sa puntong ito sa kanyang posible na gamitin ang iyong sariling mga katulong application view.
Ang magpahinga ng ang code application ngayon ay balot sa isang subukan {} mahuli {} block. Dapat kahit ano ihagis ng isang exception Zend_Gdata_App namin mahuli ito at ipakita ang isang magandang mensahe ng error sa gumagamit dulo.
Ang aming unang gawain sa loob ng subukan {} mahuli {} ay sa ruta sa aming kahilingan, ano ang mga user na gustong makita? Dito ko na ipinatupad ang ilang mga very simple code kung saan demonstration check ko ang halaga ng 'pahina' makakuha ng variable. Ang iyong routing ay maaaring maging lubhang mas kumplikadong. Ang routing ay ginagamit upang tawagan kung ano man code ng mga pangangailangan upang maging naisakatuparan upang makakuha / hawakan ang data na ibinigay ng mga gumagamit at upang sabihin sa sistema kung ano ang view (at posibleng layout script) upang gamitin.
Sa huli kung ang aming router ay hindi tumutugma sa anumang mga pahina na ito na set ng 404 code na pagtugon at ipinapakita ang isang nice na pahina ay hindi natagpuan na mensahe sa mga user na dulo. Dito, kami itapon at mahuli sa aming sariling mga exception (at isang napaka generic exception sa na) ngunit malamang na gusto mong maging pagkahagis ng iyong sariling mga exception mula sa loob ng router code.
Kapag matagumpay na namin dadalhin sa aming kahilingan namin masimulan upang gawin ang isang bagay sa code. Ito ay maaaring maging na ikaw ay may iyong sariling controllers / modelo ipinatupad o isama mo ang ilang mga code na ang na-separated medyo. Narito ako nagtakda ng isang pares ng mga simpleng mga variable sa ang layon view.
Kapag ito ay nakumpleto na namin lamang render ang pananaw sa aming mga data. Kung ang code sa throws ng isang Zend_Gdata_App exception para sa anumang dahilan na ito ay trap malapit sa ilalim ng mga script. Dito na namin malinaw buffered output, itakda ang isang 500 na tugon ng header, at sabihin sa aming mga aplikasyon sa render view script ng 'error' (na kung saan ay karaniwang isang mas Nakuha down na bersyon ng mga normal na layout / tingnan at logs ang error checking para sa mamaya).
Bilang tingnan ang mga nai-render na ang una at injected sa layout ito ay posible na baguhin ang layout mula sa loob ng view, at sa katunayan set kinakailangan Ekstra, halimbawa,
- Pamagat ng pahina
- Meta tag
- Scripts (URL o code) sa <head> seksyon
- Magdagdag ng karagdagang mga estilo, atbp
Karagdagan nito kahit na posibleng baguhin ang buong layout mula sa loob ng view sa pamamagitan ng paggamit ...
layout () <php $ na ito-?> -> setLayout ('alternativeLayout')>? ... Bilang at kapag kinakailangan.
Sa wakas ...
Umaasa ako na ito ay isang kapaki-pakinabang na pagpapakilala sa Zend_Layout at Zend_View at ito ay paganahin mo upang simulan ang pagpapatupad ng iyong sariling mga pangunahing MVC at mapabuti ang maintainibility / posibilidad na pahabain ng iyong code. Mangyaring tingnan ang source code para sa halimbawa ng paggamit ng (tingnan ang Readme file para sa mga tagubilin).
Ang code na Ipinapalagay na mayroon ka got autoloading nagtatrabaho (o ikaw ay may kasama ang mga kinakailangang mga klase). Sa karagdagan, ay hindi ko pinapayo na inyong ipatupad ang routing o data setting ng nasa itaas, ito ay tunay marami pinasimple para sa demonstration. Upang makita ang buong code tingnan ang source code ng linked sa itaas ng artikulong ito.
Zend Framework version: 1.10.6


















































Well nakasulat at pinaka nakapagtuturo, salamat!