Гола Zend_Layout и Zend_View
Во оваа статија јас гледам користење Zend_Layout и Zend_View заедно со едноставни пред контролорот за да покаже колку е можно да започне одвојување на бизнис логиката и презентација во рамките на вашата апликација. Сите кодот е достапна и на github:
Гола Zend_Layout и Zend_View на github .
MVC
Честа дизајн шема за модерни веб апликации е моделот MVC. На Zend Рамковниот "во" целосна магацинот на владата е еден спроведување на MVC во PHP и се состои од три дела:
- Модел (М)
- Види (V)
- Контролер (C)
Моделот е дизајниран така што бизнис и презентација логика се целосно одвоени една од друга (со бизнис логиката во моделот, и презентација на изглед) и контролорот седи во средината спроведување на "оркестар".
Презентација и Логика
Во Zend Рамковниот погледот е управувани од страна на две главни компоненти: Zend_View и Zend_Layout. Zend_Layout како што сугерира името се грижи за изгледот аспект на сајтот (обично заглавијата на подножјата, ленти и сл.) Zend_View насочена кон презентирање на податоци кои вашиот модел е работа за да се произведе или да се изведе.
Како програмери, и нивната примена, се развиваат што имаат тенденција да се движат низ различни фази, обично секој подобрување во однос на претходната, подобрување на одржливоста и разтегаемост. Една од главните прашања е кои презентација и логика уште се помешале и не се едноставни да почнат да ги одвојува двете.
Што е погрешно со мешање на две?
Има неколку причини зошто мешање на различни делови од апликацијата, на пример, дизајнер на работи на вашиот сајт, можеби не сакаат (или да имаат познавање) за скенирање наоколу во кодот обидува да работат надвор каде да се направи презентација промени. На ист начин инвеститорот (ако сте како мене, кој има проектантски способности на ној) може да се пробие во студена пот, кога ќе се спомене дизајн или адаптери работа.
Покрај тоа што ако подоцна сакате да ја покажете вашата веб-сајтови на различните медиуми, како што се мобилни телефони, таблет компјутерите, или откривање на податоци преку веб сервиси (XML / JSON / итн)? Имајќи мешани презентација и логиката ти стои речиси никаква надеж, без некои многу грди хакове да се повлече на презентацијата се врати од вашиот код, пред инјектирање нешто ново. Ако податоци и презентација биле одделени со што овие промени се речиси тривијални, се создаде нов поглед сценариото за новиот формат и директни барања како што е соодветно.
Ги одвојува двете
Во развојната примена своите не секогаш економски да почнат да ја применуваат целосна MVC решение и пријавата треба да се доселиле полека - понекогаш трчање стариот код паралелно со нови. Тоа можеби тоа има маси на логика (како на пример бази на податоци врска подесување, автентикација, куки ракување, итн), кои не се подготвени за обликување на вашата избрана рамки подесување, затоа стари и познати-да-се-работна шифра може да се продолжи користени до моментот може да се препишува и повторно да / refactored.
Забелешка: Користењето на Zend_Layout и Zend_View како ова е совршено прифатливи во рамките на Zend рамковен пејзаж и рамката е дизајниран така што поединечните компоненти може да се користи без остатокот од рамката. Голема предност во развојот на апликации и веројатно една од главните причини за високата навлегување во апликации претпријатие.
Преден контролор
Подолу се создаде пред контролер - една датотека со цел да ги собереш сите барања кои не се исти со на датотеката на фајл-систем. Ова често се постигнува со помош на. Htaccess фајл како оној што се користи во стандардниот Zend Рамковната инсталација. Во рамките на пред контролорот ќе биде поставување на нашиот распоред и поглед и покажувајќи каде што разни делови на апликацијата се лизга во неа.
define ('APP_PATH, dirname (__FILE__)'/..'); / / Започнете визуелниот излез ob_start (); / / Креирање на инстанца Zend_View Zend_Layout::. startMvc (); $ распоред = Zend_Layout:: getMvcInstance (); $ распоред-> setLayoutPath (APP_PATH '/ распоред / скрипти.) -> setViewSuffix (' phtml ") -> setLayout (" индекс ");. видите $ $ = распоред-> getView () -> setScriptPath (APP_PATH '/ Погледнете / скрипти ") -> addHelperPath (APP_PATH. '/ Library / Zend / Погледнете / Helper', 'Zend_View_Helper'); / / Постави База URL - ok * * речиси голи, но не треба ова! Zend_Controller_Front:: getInstance () -> setBaseUrl ($ _SERVER ['HTTP_HOST']); обиде {/ ** * Изведување на некои апликација рутирање ... * - Може да се користи ова како пред контролорот и насочување на сите барања * преку овој фајл (датотека доколку не постои во датотечниот систем * - Забелешка на метод подолу е само за демонстрација навистина, тоа ќе биде ужасно * со голем сајт * / прекинувачот ($ ['страна'] _GET) {"индекс" случај: случајот "исклучок": $ = име на страница $ _GET ['страна']; пауза; стандардно: $ Ресетирање = false; пауза;} / / Пример за страница не се најде ... ако (лажни === $ Ресетирање) {$ responseHeader = 'HTTP/1.1 404 страна не е најдена "; фрли нова Исклучок (' Страната не е пронајдена ');} / ** * Додади податоци на вашиот Погледни ги објект тука * Може да имаат свој контролер имплементација или некои датотеки * вклучува каде бизнис логика е делумно одвоени од погледот логика * / $ View-> displayText = 'Здраво од Лојд ", $ View-> buttonText =" Јас \' m не е активна ';! $ распоред-> содржина = $ View-> Render ("$ {} Ресетирање phtml."); echo $ распоред-> Render ();} фати (Исклучок $ e) {/ / Чисто од веќе ублажен содржини - ние не сакаме да се прикаже дека ob_clean (); ако (isset ($ responseHeader)!) {$ responseHeader = 'HTTP/1.1 500 Внатрешна грешка на серверот ";} заглавие ($ responseHeader); $ View-> исклучок! = $ e; $ распоред-> содржина = $ View-> Render ('error.phtml'); echo $ распоред-> Render ();}
Прво ќе почнат излез визуелниот, со тоа можеме да го постави нашиот заглавија во било која точка во барањето и знам дека е можно да ги испрати. Доколку некој исклучок да биде фрлена во било која фаза од извршувањето на кодот ќе чисти овој бафер и напише или порака за грешка содржината и изгледот. Ова осигурува дека ние не го дава дел изречена содржина содржи грешки на крајниот корисник.
Следна нова инстанца на MVC Zend_Layout е генерирана ја кажам дека од изгледот скрипти имаат наставката phtml, можат да се најдат во директориумот надвор од јавен пат, и дека нашата стандардниот распоред се нарекува индекс (. Phtml). Од изгледот ние тогаш отпакува видите објект (кој ги поставуваме нашите податоци да се претстави) и се применуваат слични подесување.
Следна ние подесување на видите објект со повикување на стандардните Zend_View помагачи. Погледни помошници се поставува на дополнителни погодности функционалност. На пример, испишување на плови во монетарната формат, или создавање на зебра ленти маса (тие може да се прочита за овде ). Со проширување на Zend_View_Helper_Abstract и додавање на вашата библиотека во овој момент нејзиното можно да ја користите вашата сопствена апликација видите помагачи.
Остатокот од барањето кодот е сега завиткан во обид {} {} се фати блок. Треба да фрли нешто на uncaught исклучок можеме да го фати и да прикаже убаво порака за грешка на крајниот корисник.
Нашата прва задача во обиде {} {} се фати за рутирање на нашето барање, што значи на корисникот сака да ја види? Тука сум спроведува некои многу едноставна демонстрација кодот каде што се провери вредноста на "Страница" се променлива. Твојот рутирање може да бидат многу многу покомплексен. На рутирање се користи за да се јавите она што некогаш кодот треба да биде извршена за да се добие / справува со податоци од корисникот и да им кажам на систем што ја видите (а можеби и распоред на сценариото) да се користи.
На крајот на краиштата, ако нашиот рутер не се совпаѓа со било која страница што поставува одговор 404 и кодот се прикажува убаво страната не е пронајдена порака за крајниот корисник. Тука, ние се фрли и го фати нашиот сопствен исклучок (и многу генерички исклучок во тоа), но веројатно ќе биде во фрлање свој исклучок од рамките на рутер код.
Откако сме успешно изнесе нашето барање да можеме да започнеме да се направи нешто со кодот. Тоа би можело да биде дека имаш свој контролори / модели или имплементирани го вклучите дел од кодот кој е веќе издвоени нешто. Овде јас во собата неколку едноставни променливи за да ги видите на објектот.
Откако ова е завршено ние едноставно ја даде на мислења со нашите податоци. Ако кодот фрла на uncaught исклучок од било која причина тоа е заглавени во долниот дел од сценариото. Еве ние јасно веќе ублажен излез, постави 500 одговор насловот, и кажете нашата апликација за рендерирање видите сценариото на "грешка" (кои се обично многу соголи верзија на нормален распоред / видите и логови за грешка за проверка подоцна).
Како што погледот е изречена првата и се вбризгува во распоред можно е да го промените изгледот од рамките на мислење, и навистина се бараат статисти, на пример,
- Наслов на страница
- Мета таговите
- Сценарија (URL или код) во делот <head>
- Додадете дополнителни стилови итн
Исто така нејзината можно дури и да го промени целиот распоред од рамките на видите со помош на ...
распоред () <php $ ова-?> -> setLayout ('alternativeLayout')>? ... Како и кога е потребно.
Конечно ...
Се надевам дека ова беше корисна вовед Zend_Layout и Zend_View и ќе ви овозможи да почнат да ја применуваат свој основен MVC и подобрување на maintainibility / разтегаемост на вашиот код. Ве молиме погледнете во изворниот код за примери за користење (види README фајлот за инструкции).
Кодот се претпоставува дека веќе сте го добив autoloading работат (или ако сте вклучени потребните часови). Покрај тоа, јас не би препорачал тоа да спроведе на рутирање податоци или поставување како погоре, ова е многу поедноставен за демонстрација. Да се види комплетниот код погледнете во изворниот код поврзан во горниот дел на оваа статија.
Zend Рамковниот верзија: 1.10.6

















































Добро напишани и повеќето информативни, благодарам!