Zend_Layout Naked dhe Zend_View

Nga Lloyd Watkin Steven , e martë 10 gusht 2010 23:47

Në këtë artikull unë shoh në përdorimin e Zend_Layout dhe Zend_View së bashku me një kontrollues të thjeshtë përpara për të treguar se si është e mundur për të filluar ndarjen e logjikës së biznesit dhe të prezantimit brenda aplikimin tuaj. Të gjithë kodi është në dispozicion në github:
Zend_Layout Naked dhe Zend_View në GitHub .

MVC

Një i përbashkët model design per web aplikacioneve moderne është model MVC. Korniza Zend 'në' të plotë rafte mode është një zbatim i MVC në PHP dhe përbëhet nga tre pjesë:

  • Modeli (M)
  • View (V)
  • Controller (C)

Model është hartuar të tilla që të biznesit dhe logjika prezantim janë të ndara plotësisht nga njëri-tjetri (me logjikën e biznesit në model, dhe prezantimi në pamje) dhe kontrollues të ulur në mes kryerjen e "orkestër".

Prezantimi dhe Logic

Në Kornizën Zend të parë është trajtuar nga dy komponente kryesore: Zend_View dhe Zend_Layout. Zend_Layout siç sugjeron emri duket pas aspektin paraqitjen e faqes (përgjithësisht headers, footers, sidebars, etj). Zend_View punon në paraqitjen e të dhënave që modeli i juaj ka qenë duke punuar për të prodhuar ose të nxjerrin.

Si zhvilluesve të, dhe kërkesat e tyre, evoluojnë kemi tendencë për të lëvizur nëpër faza të ndryshme, në përgjithësi secili një përmirësim në maintainability e mëparshme, përmirësimin dhe zgjateshmëri. Një nga çështjet kryesore është se paraqitja dhe logjikë ende të marrë intermingled dhe të thjeshtë të tij nuk për të filluar që ndan dy.

Çfarë është e gabuar me përzierjen e dy?

Ostrich Ka disa arsye pse përzierjen e pjesë të ndryshme të aplikimit, për shembull një projektuesi të punës në faqen tuaj mund të mos duan të (ose të ketë njohuri) për të skanuar rreth në kodin u munduar të gjejë se ku për të bërë ndryshime të prezantimit. Në të njëjtën mënyrë një zhvilluesi i saj (në qoftë se ju jeni si mua i cili ka aftësi të projektimit të një struc) mund të shpërthen në një djersë e ftohtë, kur ju përmend dizajn apo punë UI.

Përveç kësaj ajo në qoftë se më vonë do të donte të paraqesë faqet tuaja në media të ndryshme, të tilla si telefonat celular, PC tabletë, ose të vë në dukje të dhënave nëpërmjet shërbimeve të internetit (XML / JSON / etj)? Duke pasur paraqitje të përziera dhe logjikë që të qëndrojë pothuajse asnjë shpresë, pa disa hacks shumë e shëmtuar për të tërhequr mbrapa nga paraqitja e kodit tuaj, para se të injektuar diçka të re. Nëse të dhënat dhe prezantim ka qenë i ndarë bërë këto ndryshime janë pothuajse të parëndësishme, krijojnë një skenar të ri për të parë format e reja dhe kërkesat e të drejtpërdrejtë si të përshtatshme.

Ndan dy

Në një kërkesë në zhvillim nuk e tij gjithmonë e ekonomike për të filluar zbatimin e një zgjidhje të plotë MVC dhe aplikimit duhet të emigruar ngadalë - nganjëherë drejtimin e kodit të vjetër në mënyrë paralele me të reja. Kjo ndoshta se ka masa e logjikës (të tilla si lidhje setup bazës së të dhënave, të legalizuara, trajtimin cookie, etj) që nuk janë të gatshëm për të derdhur për të zgjedhur setup tuaj kornizave, pra kodi i vjetër dhe i njohur-të-të-pune mund të vazhdojnë të jenë të përdorur deri në atë kohë ajo mund të rishkruhen / refactored.

Shënim: Zend_Layout Përdorimi dhe Zend_View si kjo është krejtësisht e pranueshme brenda peizazhit Kornizës Zend dhe kuadër është hartuar të tilla që përbërësit individualë mund të përdoret pa pjesën tjetër të kuadrit. Një avantazh i madh në të gjitha kërkesat në zhvillim dhe ndoshta një nga arsyet kryesore për marrjen e saj të lartë në aplikacionet e ndërmarrjeve.

Front Controller

Më poshtë kam krijuar një kontrollues para - një file të vetëm të dizajnuara për të marr ndonjë kërkesë që nuk janë të përshtatura me një file në file sistemin. Kjo është arritur shpesh duke përdorur një file. Htaccess të tilla si atë të përdorur në default Zend Kornizë install. Brenda kontrollues para do të jetë caktimi i layout tonë dhe të shikoni dhe të tregon ku pjesë të ndryshme të aplikimit shqip në të.

  define ('APP_PATH', dirname (__FILE__).'/..');
 / / Output Fillimi buffering
 ob_start ();

 / / Krijimi i një shembull Zend_View
 Zend_Layout:: startMvc ();
 $ = Zend_Layout paraqitjen:: getMvcInstance ();
 $-Layout> setLayoutPath (APP_PATH. '/ Layout / Scripts')
     - SetViewSuffix> ('phtml')
     - SetLayout> ('Indeksi');

 $ = $ GetView view layout-> ()
     - SetScriptPath> (APP_PATH '/ view / Scripts'.)
     - AddHelperPath> (. APP_PATH '/ library / Zend / View / Helper', 'Zend_View_Helper');

 / / Set URL Base - ok * * pothuajse lakuriq, por ju nuk keni nevojë për këtë!
 Zend_Controller_Front:: getInstance () -> setBaseUrl ($ ['HTTP_HOST'] _SERVER);

 provoni {
     / **
      * Kryerja e disa aplikim kurs ...
      * - Mund të jetë përdorur këtë si një kontrollues para dhe drejtimin e të gjitha kërkesave
      * Përmes këtë fotografi një (me kusht skedar nuk ekziston në sistemin file
      * - Shënim metodë më poshtë është vetëm me të vërtetë për demonstrim, kjo do të jetë
      * Tmerrshme me një vend të madh
      * /
     switch ($ ['faqe'] _GET) {
    	 'Indeksi' rast:
    	 'Përjashtim' rast:
    		 $ = $ PageName ['faqe'] _GET;
    		 break;
    	 default:
    		 $ PageName = false;
    		 break;
     }
     / / Nuk Shembull i një faqe të gjetur ...
     në qoftë se (i rremë === $ pageName) {
         $ = ResponseHeader 'HTTP/1.1 404 Page Not Found';
         hedhin Përjashtim i ri ('Faqja nuk u gjet');
     }

     / **
      * Shto të dhënat për të parë tuaja objekt këtu
      * Ju mund të keni vetë zbatimin e juaj kontrollues ose disa përfshin fotografi
      * Ku logjika e biznesit është e ndarë pjesërisht nga logjika e parë
      * /
     displayText $ pamje-> = 'Hello nga Lloyd ";
     buttonText $ pamje-> = 'I \' m nuk aktiv '!;

	 ("Phtml {$ pageName}.") $ Layout-> përmbajtje = bëjnë $ pamje->;
     echo $ bëjnë-layout> ();
 } Catch (Exception $ e) {
	 / / Pastër nga buffered tashmë përmbajtje - ne nuk duam të ekranit se!
	 ob_clean ();
     if (! isset ($ responseHeader)) {
    	 $ ResponseHeader = 'HTTP/1.1 500 Gabim i Brendshëm Server';
     }
     header ($ responseHeader);
     përjashtim $ pamje-> = $ e;
     $ Layout-> përmbajtje = bëjnë $ pamje-> ('error.phtml');
     echo $ bëjnë-layout> ();
 } 

Së pari ne fillim buffering prodhimit, duke bërë këtë, ne mund të vendosni headers tonë në çdo moment në kërkesën dhe e di se është e mundur që të dërgoni ato. Duhet një përjashtim të hidhen në çdo fazë të ekzekutimit kodit ne kete tampon të pastër dhe të shkruani nga ose përmbajtje mesazh gabimi dhe layout. Kjo siguron që ne nuk do të dorëzojë një pjesë të dhënë përmbajtje përmban gabime në fund përdorues.

Next një shembull i ri MVC e Zend_Layout është krijuar dhe ne e them atë që nga Scripts layout kanë phtml extension, do të gjenden në një directory jashtë rrugë publike, dhe se layout tonë default është quajtur indeksi (. Phtml). Nga layout ne pastaj nxjerrjen e objektit të parë (për të cilën ne kemi vendosur të dhënat tona të jenë të paraqitura) dhe aplikoni përbërje të ngjashme.

Tjetra ne setup objekt të parë me një referencë për ndihmëtarë default Zend_View. View ndihmëtarë janë grupe të funksionalitetit lehtësi të tjera. Për shembull, duke shkruar nga një noton në format monetare, ose krijimin e një shirita tavolinë zebër (ata mund të lexohet në lidhje këtu ). Duke e zgjeruar dhe duke shtuar Zend_View_Helper_Abstract bibliotekën tuaj në këtë pikë të mundshme të saj për të përdorur ndihmëtarë tuaj të parë aplikimin.

Pjesa tjetër e kodit të aplikimit është mbështjellë tani në një përpjekje {} {bllok kapur}. Çdo gjë duhet të hedhin një përjashtim uncaught ne mund ta arrijë atë dhe të shfaqin një mesazh bukur gabimi të përdoruesit fund.

Detyra jonë e parë në kuadër të kapur të përpiqet {} {} është në rrugë kërkesës tonë, çfarë e bën përdoruesin doni të shihni? Këtu unë kam zbatuar disa kod shumë të thjeshtë demonstrim ku kontrolloni vlera e 'faqe' të ndryshueshme. Your kurs mund të jetë shumë e shumë më komplekse. Kurs është përdorur për të thirrur atë që kurrë kodi duhet të jetë ekzekutuar për të marrë / trajtuar të dhënat e ofruara nga ana e përdoruesit dhe të them të sistemit se çfarë pamje (dhe ndoshta script layout) për t'u përdorur.

Në fund të fundit, nëse router tonë nuk përputhet me ndonjë faqe të vendos një kod 404 përgjigje dhe tregon një faqe e bukur nuk u gjet mesazh për përdoruesit fund. Këtu, ne hedh dhe kap përjashtim tona (dhe një përjashtim shumë të përgjithshme në atë), por ndoshta ju do të jetë hedhur përjashtim tuaj nga brenda kodit router.

Pasi ne kemi shpartalluar me sukses kërkesës sonë, ne mund të fillojmë të bëjmë diçka me kodin. Ajo mund të jetë se ju keni kontrollorët tuaj / modele zbatuar ose ju përfshijnë një kod që është tashmë e ndarë disi. Këtu kam vendosur një çift i variablave të thjeshtë për të objektit të parë.

Pasi kjo është përfunduar ne thjesht bëjnë mendime me të dhënat tona. Nëse kodi hedh një përjashtim uncaught për ndonjë arsye kjo është bllokuar pranë fund të shkrimit. Këtu kemi të qartë tashmë buffered prodhimit, të vendosur një kokë 500 përgjigje, dhe them kërkesën tonë që të merr script 'gabim' view (e cila në përgjithësi është një version shumë më poshtë të hequr paraqitjen normale / pamje dhe shkrimet e gabimit për të kontrolluar më vonë).

Si pikëpamje është dhënë e parë dhe të injektuar në layout është e mundur për të ndryshuar pamjen nga brenda pikëpamje, dhe në të vërtetë të vendosur shtesa të nevojshme, për shembull,

  • Titulli i faqes
  • tags Meta
  • Scripts (URL ose kodi) në pjesën e <head>
  • Add stilet shtesë, etj

Përveç kësaj edhe e saj të jetë e mundur për të ndryshuar paraqitjen gjithë nga brenda pamje duke përdorur ...

  layout () <php $ this-> -> setLayout ('alternativeLayout')>? 

... Si dhe kur kërkohet.

Më në fund ...

Unë shpresoj se kjo ka qenë një hyrje të dobishme për Zend_Layout dhe Zend_View dhe kjo do të mundësojë që të fillojë zbatimin e vet MVC tuaja themelore dhe për të përmirësuar maintainibility / zgjateshmëri e kodit tuaj. Ju lutem, ndalo një vështrim në kodin burim për shembuj të përdorimit (shihni kartelën README për udhëzime).

Kodi i supozon se ju keni marrë tashmë autoloading punuar (ose ju keni përfshirë klasat e nevojshme). Përveç kësaj, unë nuk do të ju rekomandojmë që të zbatojë kurs ose të dhëna vendosjen si më sipër, kjo është shumë e thjeshtësuar për demonstrim. Për të parë kodin e plotë të marrë një vështrim në kodin e burimit të lidhura në krye të këtij neni.

Zend version kornizë: 1.10.6

One Response to "Zend_Layout zhveshur dhe Zend_View"

  1. Andy thotë:

    shkruar mirë dhe më informuese, thanks!

Leave a Reply













Theme Panorama nga Themocracy

9 vizitorë online tani
7 vizitore, 2 bots, 0 anëtarë
Vizitorë Max sot: 23 at 04:19 UTC
Këtë muaj: 26 at 2011/07/05 12:35 UTC
Këtë vit: 130 në 10:40 UTC 28-03-2011
Gjithsej: 130 në 10:40 UTC 28-03-2011