אפליקציות מסוף ובקרה
====================

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

Yii מייצגת כל משימה במסוף במונחים של פקודה -[command|CConsoleCommand], והאובייקט של [console application|CConsoleApplication] נועד לשדר בקשת שורת פקודות לפקודה המתאימה. האובייקט של האפליקציה נוצר בסקריפט הכניסה הראשי. בכדי להריץ משימת מסוף, אנו מריצים את הפקודה הבאה בשורת הפקודות בצורה הבאה,

~~~
php entryScript.php CommandName Param0 Param1 ...
~~~

`CommandName` מתייחס לשם הפקודה (שאינו רגיש לאותיות גדולות-קטנות), ו `Param0` , `Param1` וכן הלאה הם פרמטרים המועברים לאובייקט של הפקודה.

סקריפט הכניסה הראשי לאפליקצית מסוף בדרך כלל נכתב בצורה הבאה, בדומה לסקריפט של אפליקצית ווב,

~~~
[php]
defined('YII_DEBUG') or define('YII_DEBUG',true);
//צירוף הקובץ הראשי של Yii
require_once('path/to/yii/framework/yii.php');
// יצירת אובייקט אפליקציה והרצתו
$configFile='path/to/config/file.php';
Yii::createConsoleApplication($configFile)-»run();
~~~

לאחר מכן אנו יוצרים מחלקות שצריכות להיות תחת המחלקה הבסיסית [CConsoleCommand] שמהוות בעצם כפקודות.
כל מחלקה שמהווה פקודה צריכה להקרא בשם הפקודה שלה והוספת `Command` לסוף השם. לדוגמא, בכדי להגדיר פקודת `email` אנו צריכים ליצור מחלקה בשם `EmailCommand`. כל המחלקות של הפקודות צריכות להיות ממוקמות תחת התיקיה `commands` הנמצאת בתוך התיקיה [הראשית](/doc/guide/basics.application#application-base-directory) של האפליקציה.

» Tip|טיפ: על ידי הגדרת המאפיין [CConsoleApplication::commandMap], ניתן להגדיר פקודות בשמות שונים אשר לאו דווקא צריכים לעקוב אחרי מוסכמות נתינת השמות שתוארו למעלה והנמצאים בתיקיות שונות.

יצירת מחלקת פקודות בעיקר כוללת יישום של המתודה [CConsoleCommand::run]. פרמטרים של הפקודה מועברים אל מתודה זו כמערך. למטה מוצגת דוגמא:

~~~
[php]
class EmailCommand extends CConsoleCommand
{
    public function run($args)
    {
        $receiver=$args[0];
        // send email to $receiver
    }
}
~~~

בכל זמן בפקודה, אנו יכולים לגשת לאובייקט של אפליקצית המסוף בעזרת `Yii::app()`. בדומה לאובייקט אפליקצית ווב, ניתן להגדיר אפליקציות מסוף בעזרת קובץ הגדרות אפליקציה. לדוגמא, אנו יכולים להגדיר רכיב אפליקציה בשם `db` בכדי לגשת למסד נתונים. ההגדרות בדרך כלל מאופיינות כקובץ PHP המחזיר מערך של הגדרות המועברות למתודה ההתחלתית של מחלקת אפליקצית הווב (או [createConsoleApplication|YiiBase::createConsoleApplication] בסקריפט הכניסה הראשי).

שימוש בכלי `yiic`
---------------------

אנו השתמשנו בכלי `yiic` בכדי ליצור את [האפליקציה הראשונה](/doc/guide/quickstart.first-app) שלנו. כלי ה `yiic` למעשה מיושם כאפליקצית מסוף שקוב הכניסה הראשי שלה הוא `framework/yiic.php`. בעזרת השימוש ב `yiic`, אנו יכולים לבצע משימות כמו יצירת שלד לאפליקציה חדשה, יצירת מחלקה עבור קונטרולר או מודל, יצירת קוד הדרוש עבור פעולות CRUD, קבלת הודעות שצריכות להיות מתורגמות, וכדומה.

אנו יכולים לשפר את `yiic` על ידי הוספת פקודות מותאמות אישית. בכדי לעשות זאת, אנו צריכים להתחיל עם שלד של אפליקציה חדשה הנוצרה בעזרת הפקודה `yiic webapp`, כפי שהוסבר [יצירת אפליקציה ראשונה בעזרת Yii](/doc/guide/quickstart.first-app). הפקודה `yiic webapp` תיצור שני קבצים תחת התיקיה `protected`: הראשון `yiic` ו `yiic.bat` הם הגרסאות *המקומיות* של הכלי `yiic` שנוצרו במיוחד עבור אפליקצית הווב.

לאחר מכן אנו יכולים ליצור פקודות בעצמנו תחת התיקיה `protected/commands`. הרצת הכלי המקומי `yiic` אנו נראה את הפקודות שלנו רשומות ביחד עם הפקודות המובנות המגיעות עם המערכת. כמו כן אנו יכולים ליצור פקודות בעצמנו כדי שנוכל להשתמש בהם בעזרת כלי ה `yiic shell`. בכדי לבצע זאת, פשוט יש לשמור את מחלקת הפקודה תחת התיקיה `protected/commands/shell`.

החל מגרסא 1.1.1, אנו יכולים ליצור פקודות גלובאליות אשר ניתנות לשיתוף על גבי כל אפליקציות ה Yii הרצות על אותו שרת. כדי ליצור פקודות אלו, יש להגדיר משתנה שרתי ( "סביבתי" משתנה אשר נמצא תחת המשתנה הגלובאלי SERVER_$ בשרת ) בשם `YII_CONSOLE_COMMANDS` אשר צריך להיות מכוון לתיקיה קיימת בשרת. לאחר הגדרת המשתנה אנו מניחים את כל המחלקות של הפקודות שיצרנו שאנו רוצים שהם יהיו גלובאלים תחת התיקיה הזו, ואנו נראה את הפקודות הללו בכל מקום בו נשתמש בכלי `yiic`.

«div class="revision"»$Id: topics.console.txt 1870 2010-03-09 22:23:19Z qiang.xue $«/div»