במאמר הקודם למדנו כיצד להתקין את זנד פריימוורק על חלונות או על לינוקס. אני מניח במאמר זה שהתקנתם את זנד על ה-Wampserver או על לינוקס.
זנד עובדת לפי Front Controller design – כלומר כל הקריאות לאפליקציה שלנו נעשות דרך index.php. לכך אחראים שני דברים – קובץ ה-htaccess שדואג לקחת כל בקשה ולהעביר אותה ל-index.php וכן ה-index.php עצמו שיודע לעשות כל מה שצריך ובמיוחד לוודא שהסביבה נטענת במלואה. התהליך הזה נקרא Bootstrap.
כיוון שביצענו התקנה של זנד, יש לנו אפליקציה ראשונית. כיוון שביצענו כבר include ברמת השרת אז אנחנו לא חייבים לוודא שב-bootstrap יש את כל ה-includes אלא ישר לשבת ולהתחיל לפתח.
כיוון שב-index.php כאמור אין לנו מה לעשות, והתיקיות של הפריימוורק עצמו לא נמצאות כלל בתיקיה של הפרויקט שלנו. התיקיה שרלוונטית מבחינתנו היא תיקית application שבה יש את ה-controllers, ה-view והמודלים שלנו. נפתח את ה-IDE החביב עלינו ונראה שיש שם כמה תתי תיקיות.
הגדרות ראשוניות
בתת תיקית config יש קובץ אחד בשם application.ini שבו יש את ההגדרות השונות למצבים השונים של המערכת – development, testing ו-production שתואמות לשלבי הפיתוח השונים. ראשית יש הגדרה של מצב development עם כל מיני משתנים שלא צריך להיות גאון גדול כדי להבין אותן. כמו למשל:
phpSettings.display_startup_errors = 0
אחרי זה אנחנו יכולים לראות משהו שנראה על פניו מוזר:
[development : production]
מה שזה אומר הוא שיש לנו מצב development שיורש מ-production ובו אנחנו כמובן יכולים לדרוס חלק מההגדרות כמו שבאמת עושים. אנו נראה שבמצב development יש לנו את הגדרת phpSettings.display_startup_errors = 1 שהיא די הגיונית. כאשר אתה מפתח אתה מאד מעוניין לראות שגיאות ובעיות בעוד כאשר אתה במצב פרודקשן עדיף שלא לראות את השגיאות בתור הודעות על כל המסך… (מקרה אמיתי).
לפיכך אנחנו יכולים לראות שמצב ה-development יורש מהגדרות של production את כל ההגדרות למעט כמה הגדרות שהוא דורס ושם במקומן הגדרות משלו. איך אנו קובעים מה המצב שלנו? ניגש לקובץ index.php שנמצא ב-public ונראה שיש שם את ההגדרה:
// Define application environment
defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development'));
אני שיניתי את ההגדרה ל-development. מעכשיו אנחנו במוד של פיתוח. דבר שימושי נוסף שאפשר לעשות זה להגדיר את הקישור למסד הנתונים. בואו ונוסיף את ההגדרות הבאות:
resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = YOURUSERNAME
resources.db.params.password = 123456
resources.db.params.dbname = zf-tutorial
היכן נוסיף? מן הסתם תחת ה-production כי ממילא שאר המצבים יורשים ממנו.
שלום עולם
בואו ונסתכל על שאר התיקיות על מנת להבין מה הולך פה. תיקית controllers היא תיקיה חשובה, בואו ונסתכל על ה-controllers, אנו נראה שיש שני קבצים. זה שמעניין אותנו הוא IndexController.php, אם נכנס אליו, אנו נראה שיש לו שתי מתודות חשובות. אחת מהן היא init שעליה נדבר אחר כך והשניה היא indexAction. קבוצת ה-actions היא קבוצה מאד חשובה בזנד והיא מאפשרת לנו לבצע פעולות שונות. indexAction היא action דיפולטיבי שמתרחש בכל controller ברגע שנכנסים ל-index שלו.
על מנת להבהיר מה הולך פה, אני רוצה שתכניסו את השורה הבאה ל:indexAction:
$this->view->assign('title', 'Hello, World!');
מה שזה עושה זה להכניס משתנה בשם title אל ה-view ולתת לו ערך בשם Hello World. בואו ונשתמש במשתנה הזה ב-view! נכנס לתיקית views/scripts/index ונבחר את index.phtml. חדי העין מביניכם יראו שזה בדיוק העיצוב של המסך שראינו בהתחלה! כל מה שעלינו לעשות זה להכניס את השורה הזו בין תגיות ה-h1:
< ?php echo $this->escape($this->title); ?>
בעצם ראינו שיש כאן שלושה דברים:
1. קונטרולר בשם index.
2. לפחות action אחד לכל קונטרולר כאשר ה-action הדיפולטיבי נקרא indexAction
3. view שמציג את הכל.
במאמר הבא נחדד את נושא הקונטרולרים וה-actions בזנד פריימוורק ואף ננסה ליצור אחד.