עירום Zend_Layout ו Zend_View

לפי ווטקין לויד סטיבן , יום שלישי 10 אוגוסט 2010 23:47

במאמר זה אני מסתכל על השימוש Zend_Layout ו Zend_View יחד עם הבקר חזית פשוטה כדי להראות כיצד אפשר להתחיל להפריד את הלוגיקה העסקית ואת המצגת בתוך היישום שלך. כל קוד זמין GitHub:
עירום Zend_Layout ו Zend_View על GitHub .

MVC

המשותף דפוס עיצוב עבור יישומי אינטרנט מודרניים הוא תבנית MVC. Zend Framework מצב במלואה "מחסנית" הוא אחד מימוש MVC ב PHP ו מורכב משלושה חלקים:

  • מודל (ז)
  • צפה (V)
  • Controller (C)

התבנית נועדה כזה עסקים ההיגיון מצגת מופרדים לחלוטין אחד מהשני (עם לוגיקה עסקית במודל, והצגת בתצוגת) ואת הבקר יושב באמצע בניהול "התזמורת".

מצגת ו Logic

ב המסגרת Zend לצפות מתבצע על ידי שני מרכיבים עיקריים: Zend_View ו Zend_Layout. Zend_Layout כפי שהשם מרמז נראה אחרי בהיבט הפריסה של האתר (בדרך כלל כותרות עליונות ותחתונות, sidebars, וכו '). Zend_View focusses על הצגת הנתונים כי המודל שלך עובדת לייצר או להפיק.

כמו מפתחים, ואת היישומים שלהם, להתפתח, אנחנו נוטים לעבור שלבים שונים, בדרך כלל, כל שיפור על תחזוקה, שיפור והרחבה הקודם. אחד הנושאים המרכזיים הוא כי המצגת וההיגיון עדיין לקבל התערבבו ולהתחיל להפריד את שני שלה פשוט לא.

מה לא בסדר עם ערבוב שני?

Ostrich יש כמה סיבות לכך ערבוב בחלקים שונים של היישום, למשל מעצב לעבוד על האתר שלך לא רוצה (או יש את הידע) כדי לסרוק סביב בקוד מנסה לפענח היכן לבצע שינויים במצגת. באותו אופן מפתח (אם אתה אוהב אותי שיש לו את הכישורים העיצוב של יען) יכולה לפרוץ זיעה קרה בעת אזכור עיצוב או עבודה UI.

בנוסף מה אם מאוחר יותר אתה רוצה להציג את האתרים שלך על מדיה שונים, כגון טלפונים ניידים, מחשבי לוח, או לחשוף את הנתונים באמצעות שירותי האינטרנט (XML / JSON / וכו ')? לאחר המצגת ההיגיון מעורב אתה עומד כמעט ללא תקווה ללא מעט פריצות מכוערים מאוד למשוך את המצגת בחזרה מתוך הקוד שלך, לפני הזרקת משהו חדש. אם הנתונים במצגת הופרד שינויים אלה הם כמעט טריוויאלי, ליצור סקריפט תצוגה חדש עבור התבנית החדשה ובקשות ישירה על פי הצורך.

הפרדת שני

ביישום המתפתחת כלכלית לא תמיד שלה כדי להתחיל ביישום פתרון מלא MVC לבין היישום צריך להיות היגרו לאט - לפעמים מפעיל קוד בן במקביל חדש. זה אולי כי יש המוני של ההיגיון (כגון התקנה באתר חיבור, אימות, טיפול עוגיות, וכו '), כי הם לא מוכנים דפוס ההתקנה שבחרת המסגרות, ולכן הקוד הישן הידוע-to-be-עובד יכול להמשיך להיות בשימוש עד למועד בו ניתן לשכתב / refactored.

הערה: Zend_Layout שימוש ו Zend_View כמו זה מקובל לחלוטין בתוך Zend Framework הנוף ואת המסגרת תוכנן כך רכיבים בודדים ניתן להשתמש ללא שאר המסגרת. יתרון גדול יישומים מתפתחים כנראה אחת הסיבות העיקריות ספיגת גבוהה ביישומים ארגוניים.

החזית Controller

להלן אני יוצר הבקר מול - קובץ יחיד נועד לאסוף את כל בקשות אשר אינם מתאימים לקובץ במערכת הקבצים. זהו לעיתים קרובות מושגת באמצעות קובץ. Htaccess כמו זה המשמש כברירת המחדל Zend Framework להתקין. בתוך הבקר לפני שאני יהיה הגדרת הפריסה שלנו להציג מראה איפה בחלקים שונים של להחליק את היישום לתוכו.

  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 / צפה / עוזר ',' Zend_View_Helper ');

 / / הגדרת כתובת הבסיס - אישור * * כמעט עירומה, אבל אתה לא צריך את זה!
 Zend_Controller_Front:: getInstance () -> setBaseUrl ($ ['HTTP_HOST'] _SERVER);

 נסה {
     / **
      * לבצע כמה יישומים ניתוב ...
      * - יכול להיות באמצעות כבקר מול ולכוון את כל בקשות
      * באמצעות הקובץ הזה (בתנאי הקובץ אינו קיים בקובץ מערכת
      * - הערה השיטה שלהלן היא רק באמת להפגנה, זה יהיה
      * נורא עם אתר גדול
      * /
     הבורר ($ ['מקור'] _GET) {
    	 במקרה "מדד":
    	 במקרה "חריג":
    		 $ $ = Pagename ['מקור'] _GET;
    		 לשבור;
    	 מחדל:
    		 $ Pagename = false;
    		 לשבור;
     }
     / / דוגמא של דף לא נמצא ...
     אם (שווא === $ pagename) {
         $ = ResponseHeader 'HTTP/1.1 404 דף לא נמצא';
         לזרוק חריגה חדשה ('הדף לא נמצא ");
     }

     / **
      * הוסף הנתונים כדי להציג את האובייקט כאן
      * ייתכן שיהיה יישום בקר משלך או כמה כולל קבצים
      * איפה ההיגיון העסקי מופרד בחלקו מן ההיגיון להציג
      * /
     displayText $ צפה-> = "שלום מ לויד ';
     buttonText $ צפה-> = 'אני \' מ 'לא פעיל'!;

	 ("Phtml {$ pagename}.") $ פריסת-> תוכן = לדקלם $ צפה->;
     הד $-> פריסת לדקלם ();
 } לתפוס (חריגה $ e) {
	 / / נקיון שנאגרו מחוץ כבר תוכן - אנחנו לא רוצים להציג את זה!
	 ob_clean ();
     אם (! isset ($ responseHeader)) {
    	 $ ResponseHeader = 'HTTP/1.1 500 Internal Server Error ";
     }
     כותרת ($ responseHeader);
     למעט $ צפה-> = $ האלקטרוני;
     $ פריסת-> תוכן = לדקלם $ צפה-> ("error.phtml ');
     הד $-> פריסת לדקלם ();
 } 

ראשית אנחנו מתחילים באגירה התפוקה, על ידי פעולה זו אנו יכולים להגדיר כותרות שלנו בכל שלב הבקשה ואת יודעת שזה אפשרי לשלוח אותם. חריג יש לזרוק בכל שלב של ביצוע קוד אנחנו נקיים את זה למאגר ולכתוב החוצה או הודעת שגיאה התוכן והפריסה. הדבר מבטיח כי אנחנו לא מספקים חלק שניתנו תכנים המכילים שגיאות למשתמש הקצה.

הבא מופע חדש MVC של Zend_Layout מופק ואנחנו אומרים את זה כי את הסקריפטים פריסה יש phtml הרחבה, נמצאים בספרייה מחוץ לנתיב הציבורי, וכי פריסת ברירת המחדל שלנו נקרא אינדקס (. Phtml). מפריסת אנחנו מכן לחלץ את האובייקט תצוגה (שאליה אנו קובעים הנתונים שלנו כדי להיות מוצג) ולהחיל ההתקנה דומה.

אנו הבא בהגדרת אובייקט תצוגה עם הפניה עוזרים מחדל Zend_View. העוזרים צפה הם קבוצות של פונקציונליות ונוחות נוספת. לדוגמה, כותב את המצוף בפורמט המוניטרית, או יצירת פסים השולחן הזברה (הם יכולים לקרוא על פה ). על ידי הרחבת Zend_View_Helper_Abstract והוספת הספרייה שלכם בשלב זה אפשרי שלה כדי להשתמש בתצוגת משלך העוזרים היישום.

שאר הקוד של היישום הוא עטוף עכשיו לנסות {} {} לחסום לתפוס. כל דבר צריך לזרוק חריג uncaught אנו יכולים לתפוס אותו ולהציג הודעת שגיאה נחמד למשתמש הקצה.

המשימה הראשונה שלנו בתוך לתפוס לנסות {} {} היא לבקש המסלול שלנו, מה המשתמש רוצה לראות? כאן אני כבר יישמה כמה קוד הפגנה פשוטה מאוד שבה אני יכול לבדוק את הערך של "מקור" לקבל משתנה. ניתוב שלך יכול להיות הרבה יותר מורכבת. הניתוב הוא נהג להתקשר פעם מה הקוד צריך להיות מוצא להורג לקבל / לטפל הנתונים הנמסרים על ידי המשתמש ואת לספר את המערכת מה להציג (ואולי התסריט הפריסה) להשתמש.

בסופו של דבר אם הנתב שלנו אינו תואם כל מקור זה קובע קוד 404 תגובה מציג דף נחמד לא מצאתי הודעה למשתמש הקצה. הנה, אנחנו לזרוק ולתפוס למעט משלנו (ו חריג הגנרית מאוד כי), אך ככל הנראה יהיה לך לזרוק חריג משלך מתוך הקוד של הנתב.

ברגע שאנחנו מנותבים בהצלחה הבקשה שלנו אנו יכולים להתחיל לעשות משהו עם קוד. זה יכול להיות שיש לך בקרי משלך / מודלים מיושם או שאתה כוללים כמה קוד שכבר נפרדו במקצת. כאן אני מגדיר כמה משתנים פשוטה לאובייקט להציג.

ברגע זה הוא סיים אנחנו פשוט לעבד את ייחודיות עם הנתונים שלנו. אם הקוד זורק חריגה uncaught מסיבה כלשהי זה הוא לכוד בחלקו התחתון של התסריט. הנה אנחנו כבר ברור שנאגרו פלט, להגדיר כותרת 500 בתגובה, ולספר היישום שלנו כדי להבהיר סקריפט להציג את "שגיאה" (שהוא בדרך כלל גירסה הפשיטו הרבה למטה של ​​פריסת נורמלי / להציג יומני השגיאה לבדיקת מאוחר יותר).

כמו לצפות מעובד הראשון מזריקים פריסת אפשר לשנות את הפריסה מתוך תצוגת, ואכן להגדיר ניצבים נדרש, למשל,

  • עמוד פופולריות
  • תגיות מטא
  • סקריפטים (כתובות או קוד) לקטע <head>
  • הוספת סגנונות נוספים, וכו '

בנוסף אפילו שלה ניתן לשנות את הפריסה כולה מתוך תצוגת באמצעות ...

  הפריסה () <PHP $ הזה?> -> setLayout ("alternativeLayout ')>? 

... כפי ו בעת הצורך.

לבסוף ...

אני מקווה שזה כבר במבוא שימושי Zend_Layout ו Zend_View והיא תאפשר לך להתחיל ביישום MVC הבסיסית שלך ולשפר את maintainibility / הרחבה של הקוד שלך. אנא תסתכל על קוד המקור של דוגמאות לשימוש (עיין בקובץ ReadMe עבור ההוראות).

קוד מניח כי יש לך כבר autoloading עובד (או כללת המעמדות חובה). בנוסף, אני לא הייתי ממליץ לך ליישם את ניתוב נתונים או הגדרה כאמור לעיל, זה הרבה יותר פשוט מאוד להפגנה. כדי לראות את הקוד המלא תסתכל על קוד המקור המקושר בראש מאמר זה.

Zend Framework גירסה: 1.10.6

תגובה אחת ל "Zend_Layout Zend_View עירום"

  1. אנדי אומר:

    כתוב היטב ואינפורמטיבי ביותר, תודה!

השאירו תגובה













פנורמה לפי נושאים Themocracy

6 מבקרים מקוון עכשיו
4 אורחים, 2 בוטים, 0 חברים
מקס מבקרים היום: 23 בשעה 04:19 UTC
החודש: 26 ב 2011/07/05 12:35 UTC
השנה: 130 ב 28-03-2011 22:40 UTC
כל הזמן: 130 ב 28-03-2011 10:40 UTC