מדריך Yii 2 – הרצת אפליקציות (הבסיס)

אחרי שמתקינים את Yii 2 ,ניתן לגשת לאפליקציה באמצעות ה-URL : http://hostname/basic/web/index.php או http://hostname/index.php תלוי בהגדרות של שרת ה-Web.  במדריך הזה נלמד איך מאורגן הקוד, ואיך מנותבת כל בקשה (request) של הגולש .

הנחת יסוד : יש לכם את תיקית basic/web בתיקיה שמחזיק שרת ה-web ( נניח localhost/basic/web) . כמובן, אם התקנתם את זה בתיקיה אחרת , תתאימו את הכתובות של ה-URL בהתאם.

אפליקצית ה-Basic, מכילה 4 עמודים :

  • דף הבית שניתן להגיע אליו דרך ה-URL – http://hostname/index.php
  • דף ה-About
  • דף ה-Contact שמכיל טופס  יצירת קשר דרך מייל
  • דף login  – שמכיל את היכולת לבדוק משתמש, אם תנסו אותו,עם admin/admin תוכלו לראות שהמילה login הופכת להיות logout.

העמודים האלו חולקים יחד את אותו Header , Footer, Menu .

בתחתית אפשר לראות כלי חזק מאוד של Yii שנקרא  debugger tool שמספק עזרה מאוד נחוצה כמו הודעות Log , שאילתות ל-DB, סטטוטים של בקשות ועוד.

מבנה האפליקציה ב-Yii

  • תיקית basic  – מכילה את כל האפליקציה
    • composer.json – לשימוש באמצעות ה-Composer
    • תיקית Config – הגדרות
      • console.php הגדרות של ה-console
      • web.php – הגדרות של האפליקציה
    • תיקית commands – מכילה פקודות של ה-console
    • תיקית controllers – מכילה את קבצי הקונטרולרים
    • תיקית models – מכילה את קבצי המודלים
    • תיקית runtime – מכילה קבצי ש-Yii מייצרת תוך כדי ריצה, כמו לוגים, ו-cache.
    • תיקית vendor – מכילה חבילות שהותקנו על ידי ה-composer, כולל את קבצי הליבה של Yii.
    • תיקית views – מכילה את קבצי ה-view
    • תיקית web
      • index.php – קובץ הגישה לאפליקציה
      • assets – קבצי css + JS
    • קובץ yii (או קובץ yii.bat) – קובץ ה-console.

מה צריך להיות חשוף למשתמש ?

ב-Yii אפשר לחלק את הקבצים כך : כל מה שנמצא בתיקית web, נגיש לגולש, כל השאר – צריך להיות לא נגיש לגולש, ונגיש רק לשרת/לסקריפטים.

Yii משתמשת כמו פריימורקים רבים בשיטת/מתודולגית MVC, כפי שבוודאי שמת לב מהמבנה של התיקיות -models/views/controllers – מכילות כל אחת את הקבצים הרלוונטים.

איך מנותבת בקשה/request ב-Yii ?

לכל אפליקציה יש קובץ index.php שהוא הקובץ היחיד שנגיש לגולש. קובץ זה לוקח את ה-request ויוצר מופע של המחלקה application ואז מתחיל לטפל ב-request.

המחלקה application מפענחת את ה-request עם סיוע של רכיבי ה-components ומנתבת את ה-request בין רכיבי ה-MVC.

יש לציין שבחלק של ה-views, נעזרים ב-Widgets כדי לבנות את ה-views.

 ניתוב של request ב-Yii – שלב אחרי שלב

  1. הגולש מקליד כתובת, ונשלח request ל-enrty script, שהוא כאמור , קובץ web/index.php
  2. הגדרות ה-configuration נטענות . ובנוסף נוצר מופע (instance) של המחלקה application כדי לטפל ב-request.
  3. המחלקה application מפענחת את הנתיב – route, עם עזרה של מרכיב שנקרא -request.
  4. נוצר מופע (instance) של controller כדי לטפל ב-request.
  5. הקונטרולר יוצא מופע (instance) של ה-action הדרוש ומפעיל Filters אם יש צורך.
  6. אם אחד ה-Filters כושל, הפעולה כולה נעצרת (כלומר ה-action כושל).
  7. אם כל ה-Filters עוברים בהצלחה, אז ה-Action מבוצעת.
  8. כאן ה-Action תופס פיקוד, ומבצע  טעינה של המודל (model) ואם זהו מודל שקשור ל-DB, אז נשלפות הרשומות מה-DB.
  9. ה-Action מייצר View ומחזיר את ה-view ביחד עם נתוני ה-model אל השלב הבא. (הייצור של ה-View מכונה render) .
  10. התוצאה מוחזרת אל רכיב ה-response.
  11. רכיב ה-reposnse שולח תשובה אל הדפדפן של הגולש.

זכויות יוצרים : המדריך פורסם לפי התנאים של Yii , והמקור נמצא בקישור הזה.

התקנת yii2 על linux ללא composer

מורידים את הקובץ tar מכאן http://www.yiiframework.com/download/

לאחר מכן,
מעתיקים אותו לתיקית ה-web שלכם.

נותנים לו הרשאות מלאות (אפשר פשוט לתת בעלות ליוזר של apache, באמצעות chown )

ואז גולשים בדפדפן אל התיקיה ו-גמרנו.

http://localhost/basic/web/index.php

הערה : אומנם לפי התיעוד הרשמי, אמורים להיכנס לתיקית config, ולערוך את קובץ web.php – ולרשום בו סיסמא כלשהיא להצפנת ה-cookies , בערך cookieValidationKey, אבל אם אתם מורידים את פרויקט ה-basic/advanced , ולא פריימוורק ריק, אז זה קיים כבר.

אם מסיבה כלשהיא זה לא עובד , ניתן לבצע בדיקה של דרישות ברירת המחדל באמצעות גלישה אל http://localhost/basic/requirements.php

או הפעלה של קובץ זה משורת הפקודה.

הגדרות מומלצות עבור ה-Apache בשביל yii2 בסביבת production

בשרת production, היינו רוצים לגלוש לאפליקציה/אתר שלנו ישירות כך : http://www.example.com/index.php

ולא כך : http://www.example.com/basic/web/index.php

לשם כך נדרש להפנות את ה-Virtual host ישירות אל תיקית  basic/web.

בנוסף נרצה בוודאי להסתיר את index.php משורת הכתובת.

כדי לבצע את הדברים האלו, יש להגדיר בקובץ httpd.conf , או בתוך הקובץ שמגדיר את ה-virtual host, את ההגדרות הבאות :

# Set document root to be "basic/web"
DocumentRoot "path/to/basic/web"

<Directory "path/to/basic/web">
    # use mod_rewrite for pretty URL support
    RewriteEngine on
    # If a directory or a file exists, use the request directly
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    # Otherwise forward the request to index.php
    RewriteRule . index.php

    # ...other settings...
</Directory>

יש לזה יתרונות נוספים, ברגע שמגדירים את bsic/web כתיקית ברירת המחדל של ה-virtual host, מונעים למעשה מהגולשים אפשרות לגשת לתיקיות פנימיות רגישות, שהם אינם צריכים לראות.

זכויות יוצרים : המדריך פורסם לפי התנאים של Yii , והמקור נמצא בקישור הבא :  http://www.yiiframework.com/doc-2.0/guide-start-installation.html