מדריך Yii 2 – אפליקצית "שלום עולם"

המדריך הזה מתאר איך ליצור אפליקצית "שלום עולם"  על מנת לבצע זאת, אנו ניצור action וגם view :

  • האפליקציה תשלח בקשה (request)  לדף אל ה-action
  • ואז ה-action תייצר את ה-view ותציג את המילה Hello אל הגולש.

במסגרת מדריך זה תלמד 3 דברים :

  • איך ליצור action – פעולה שמגיבה לבקשה (=request)
  • איך ליצור view שיציג את תוכן המענה לבקשה (=response)
  • איך האפליקציה שולחת בקשות (requests ) אל actions.

איך ליצור Action ב- Yii

כדי ליישם את אפליקצית שלום עולם ב-Yii אנחנו ניצור action שיקרא say. ה-Action הזה, היא פונקציה של מחלקה, שתקבל פרמטר בשם message מה-request  ותציג את ההודעה לגולש.

אם ה-request נשלחה ללא הפרמטר message , אז ה-action תציג את ברירת המחדל – המילה Hello.

מה זה בעצם Action ב- Yii ?

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

התוצאה של ביצוע Action – היא מה שהגולש מקבל (מכונה גם response).

דוגמא להגדרת Action ב- Yii

כל Action חייבת להיות מוגדרת בתוך Controller. לצורך הפשטות, נגדיר כעת את ה-Action בשם say בתוך Controller שכבר קיים, שנקרא SiteController.

ה-Controller הזה הוא מחלקה שמוגדרת בקובץ controllers/SiteController.php.

כך יש להגדיר את ה-Action בשם say :

<?php

namespace appcontrollers;

use yiiwebController;

class SiteController extends Controller
{
    // ...existing code...

    public function actionSay($message = 'Hello')
    {
        return $this->render('say', ['message' => $message]);
    }
}

הסבר הקוד : ה-Action שנקראת say, הוגדרה כמתודה בשם actionSay בתוך המחלקה SiteCotroller.  כדי להפריד מתודות שהן actions ממתודות אחרות , Yii דורשת שכל action יתחיל במילה action באותיות קטנות. השם שמופיע מייד אחרי המילה action הוא השם המזהה של ה-action, שמכונה גם action ID.

כללים למתן שמות ל-Actions ב- Yii

נפריד בין הצורה שה-action נקרא בתוך המערכת, ובין השם שבו הוא נקרא כאשר מגדירים את המתודה.

שמות של actions בתוך המערכת (=מה שנקרא action's ID )

  1. תמיד באותיות קטנות,.
  2. כאשר אם השם מורכב ממספר מילים, יש להפריד בין המילים באמצעות מקףלמשל create-comment.

המתודה של ה-Action צריכה תמיד להיות

  1. בפורמט CamelCased (=אות ראשונה של כל מילה היא אות גדולה, ללא רווח בין המילים)
  2. עם המילה action באותיות קטנות בתחילת שם המתודה .

למשל : actionCreateComment

במקרה שלנו, ה-Action מקבלת פרמטר במשתנה $message . כאשר הגדרנו ערך ברירת מחדל למשתנה זה – המחרוזת "Hello" (בדיוק בצורה הרגילה שבה מגדירים ערך ברירת מחדל לכל משתנה בפונקציות php).

כאשר האפליקציה תקבל request  ותחליט שהפעולה הנדרשת היא הפעולה say , אז האפליקציה תיקח את הפרמטר שהתקבל ב-request (נניח ב-get בשורת הכתובת) ותעביר אותו את הפונקציה actionSay.

בתוך המתודה actionSay השתמשנו במתודה render() שמה שהיא עושה – היא מחוללת view, על בסיס קובץ view שגם הוא נקרא say.

הפרמטר message מועבר אל ה-view , כדי שנוכל להשתמש בו שם. התוצאה של יצירת ה-view מוחזרת באמצעות ה-Action.

מוחזרת לאן ? – התוצאה מוחזרת לאפליקציה ומוצגת לגולש בדפדפן.

 איך יוצרים View ב- Yii ?

במונח Views מתכוונים לסקריפטים שאתה כותב, כדי לייצר תצוגה של הדף. למשל, במשימה שלנו, אנחנו צריכים לכתוב דף שיציג את הביטוי "שלום עולם" או כל ביטוי אחר שנעביר דרך המשתנה message. לצורך כך אנחנו ניצור view שיקרא בשם say,  שמטרתו להציג את תוכן הפרמטר message. את הפרמטר הוא יקבל מה-action שזה עתה בנינו.

צור קובץ php חדש, ושתול בו את הטקסט הבא :

<?php
use yiihelpersHtml;
?>
<?= Html::encode($message) ?>

הערה חשובה : בדוגמא הזו, נעשה שימוש בקיצור הקוד הבא <?= , והיות והוא לא מוכר לרבים, אז אתן הסבר קצרצר : הקיצור הזה הוא בדיוק כמו לכתוב את הקוד הבא

<?php echo .....bla bla bla

כלומר, במקום לכתוב את תגית הפתיחה המלאה של php, ואת המילה echo, אם משתמשים בקיצור הזה, חוסכים בעצם בכתיבה בכך שרושמים רק 3 תוים.

כדי שזה יעבוד , אז ב-php.ini האפשרות short_open_tag חייבת להיות מאופשרת.

את הקוד ההוא של ה-view שנקרא say עליך לשמור בקובץ /views/site/say.php. ואז, כאשר המתודה render() תופעל בתוך ה-action, היא תחפש קובץ במיקום הבא : views/ControllerID/viewName.php.

שים לב, בקוד פה, עטפנו את הפרמטר message בפקודה HTML-encoded לפני שהדפסנו אותו על המסך.

למה זה טוב ? – זוהי שיטה מקובלת ונחוצה מאוד, כדי למנוע מתקפות XSS באמצעות משלוח של קוד JS זדוני דרך הפרמטר הזה.

בתוך View אתה שם את כל הקוד שמוצג למשתמש, זאת אומרת, תגי Html, טקסט חופשי, וכו' וכו'. מה שקורה בפועל הוא שאחרי שהמתודה render() מופעלת, אז התוכן שמיוצר באמצעות ה-view (שנקראת say בדוגמא שלנו) מוחזר אל האפליקציה ומוצג לגולש, בתור מענה (=response) .

נסה את זה בעצמך !

כעת, הגיע זמן לגלוש אל הכתובת, ולראות שהכל עובד.

הכתובת היא

http://hostname/index.php?r=site/say&message=Hello+World

ואתה צריך לקבל דף שיראה כך :

אפליקצית שלום עולם ב- Yii
אפליקצית שלום עולם ב- Yii

 

הכתובת הזו הובילה לתוצאה של עמוד "Hello World". כאשר העמוד קיבל את אותו Header+fotter של שאר עמודי האפליקציה.

אם תמחק מה-URL את הפרמטר message, ותרענן את הדף, תוכל לראות שתתקבל המילה "Hello". זה מפני שהפרמטר message קיבל את המילה "Hello" בברירת מחדל בפונקציה actionSay.

כדאי לדעת : הדף החדש שיצרנו מקבל את אותו Header+Footer כמו שאר הדפים באפליקציה, כיוון שהמתודה render() מוסיפה אותם באופן אוטומטי לכל view, מתוך מה שנקרא layout, ומאוחסן במקרה שלנו במיקום views/layouts/main.php.

מה משמעות הפרמטר r בכתובת ?

הפרמטר r הוא קיצור של המילה route כלומר – ניתוב. זוהי הצורה ב-Yii לפנות אל action ספציפי. כאשר בכל פעם שנראה לפנות ל-action נציין זאת בתבנית הבאה ControllerID/ActionID.

ואז, כאשר האפליקציה מקבלת request היא בודקת את הפרמטר הזה, ופונה אל המחלקה של ה-ControllerID המתאים, ובתוכה אל המתודה של ה-ActionID המתאים, כדי לבצע את הפעולה שהתבקשה דרך ה-URL. בדוגמא שלנו, היא פנה אל ה-Controller שנקרא SiteController ובתוכו אל ה-Action שנקראת say . וכתוצאה, הפעלנו למעשה את המתודה  SiteController::actionSay() כדי לבצע את הפעולה.

חשוב לדעת : בדיוק כמו הכללים לכתיבת שמות של actions. גם ל-controllers יש כללים מחייבים עבור השמות שלהם. אותם כללים בדיוק. כלומר, שם המחלקה של ה-Controller מורכב ממילים בפורמט CamelCased (כל מילה מתחילה באות גדולה, ללא רווחים). ובסוף הביטוי יש להוסיף את המילה Controller.
לדוגמא : אם ה-Controller ID הוא post-comment, אזי שם המחלקה יקרא PostCommentController.

סיכום – אפליקצית "שלום עולם" ב-Yii.

במדריך הזה :

  • נגעת במושגים controller , view ששיכים לשיטת הפיתוח MVC.
  • יצרת action שהיא חלק מ-controller כדי לטפל ב-request מסוים.

במדריך הזה, לא נעשה שימוש ב-model כלל, והמידע היחיד שהשתמשנו בו, היה הפרמטר message.

בנוסף למדת על ניתוב (route) ב- Yii, שמהווה מעין גשר בין ה-request של המשתמש ובין המתודות (=actions) של ה-Controller.

בפרק הבא תלמד כיצד ליצור model. וכיצד להוסיף דפים חדשים הכוללים טפסי HTML.

 

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