שימוש בהרחבה בדרך כלל כולל את שלושת השלבים הבאים:
extensions/xyz
הנמצאת בתיקיה ראשית של האפליקציה, כש xyz
הינו שם ההרחבה.לכל הרחבה יש שם המייחד אותה משאר ההרחבות. בהתחשב שיש לנו הרחבה בשם xyz
, אנו תמיד יכולים להשתמש בנתיב המקוצר ext.xyz
בכדי לאתר את התיקיה הראשית שלה המכילה את כל הקבצים של xyz
.
» Note|הערה: הנתיב המקוצר ext
קיים מגרסא 1.0.8. קודם לכן, היה צורך להשתמש ב application.extensions
בכדי להתייחס לתיקיה המכילה את כל ההרחבות. בתיאור הבא, אנו מניחים ש ext
מוגדר. יהיה צורך בלהחליף אותו עם application.extensions
במידה והינך משתמש בגרסא 1.0.7 ומטה.
הרחבות שונות כוללות דרישות שונות בנוגע לייבוא שלהם, הגדרות ושימוש. בחלק הבא, אנו מסכמים מקרים נפוצים של שימוש בהרחבות, לפי הקטגוריות שלהם המתוארות סקירה.
לפני שנתחיל להסביר בנוגע לשימוש הרחבות צד-שלישי, אנו נרצה קודם להציג את ספרית ה Zii, שמפותחת על ידי צוות הפיתוח של Yii וכלולה בכל הגרסאות של Yii החל מגרסא 1.1.0. ספרית ה Zii מאוחסנת כפרוייקט גוגל בשם zii.
בעת שימוש בהרחבה מספרית Zii, יש צורך להתייחס למחקה על ידי שימוש בנתיב מקוצר בפורמטר של zii.path.to.ClassName
. במקרה הזה, הנתיב הראשי zii
כבר הוגדר מראש על ידי Yii. נתיב זה מתייחס לתיקיה הראשית של ספריית ה Zii. לדוגמא, כדי להשתמש ב CGridView, אנו נשתמש בקוד הבא בתוך קובץ תצוגה כשאנו מתייחסים להרחבה:
$this-»widget('zii.widgets.grid.CGridView', array(
'dataProvider'=»$dataProvider,
));
בכדי להשתמש ברכיב אפליקציה, אנו קודם צריכים לשנות את הגדרות האפליקציה על ידי הוספת רשומה (אלמנט) חדשה למאפיין של components
, כפי שמוצג בדוגמא הבאה:
return array(
// 'preload'=»array('xyz',...),
'components'=»array(
'xyz'=»array(
'class'=»'ext.xyz.XyzClass',
'property1'=»'value1',
'property2'=»'value2',
),
// הגדרות רכיבים נוספים
),
);
לאחר מכן, אנו יכולים לגשת לרכיב בכל מקום על ידי Yii::app()-»xyz
. הרכיב יווצר בצורה עצלה (זאת אומרת יווצר כשהוא נקרא בפעם הראשונה), אלה אם כן אנו נרשום את שמו במאפיין של preload
בהגדרות האפליקציה.
התנהלות/התנהגות ניתנת לשימוש בכל מיני רכיבים. השימוש בהם כרוך בשני שלבים. בשלב הראשון, ההתנהלות מצורפת לרכיב כלשהו. בשלב השני, מתודת התנהלות נקראת על ידי הרכיב אליו היא צורפה. לדוגמא:
// הפרמטר הראשון הוא יחודי ומשמש לצורך זיהוי ההתנהלות
$component-»attachBehavior($name,$behavior);
// המתודה test נמצאת במחלקה של $behavior
$component-»test();
בדרך כלל, התנהלות מצורפת לרכיב דרך הגדרות ולא על ידי קריאה למתודה attachBehavior
. לדוגמא, בכדי לצרף התנהלות רכיב באפליקציה, אנו נשתמש בהגדרות האפליקציה הבאות:
return array(
'components'=»array(
'db'=»array(
'class'=»'CDbConnection',
'behaviors'=»array(
'xyz'=»array(
'class'=»'ext.xyz.XyzBehavior',
'property1'=»'value1',
'property2'=»'value2',
),
),
),
//....
),
);
הקוד למעלה, מצרף את ההתנהלות xyz
לרכיב האפליקציה db
. אנו עושים זאת מאחר והמחלקה CApplicationComponent מגדירה מאפיין בשם behaviors
. על ידי הגדרת מאפיין זה עם רשימה של הגדרות התנהלות, הרכיב יצרף את ההתנהלויות הללו בזמן האתחול שלו.
עבור המחלקות CController, CFormModel ו CActiveRecord שבדרך כלל דורשות הרחבה, צירוף התנהלויות נעשית על ידי דריסה של המתודה ()behaviors
. המחלקה תצרף אוטומטית את ההתנהלויות המוגדרות במתודה זו בזמן אתחול. לדוגמא,
public function behaviors()
{
return array(
'xyz'=»array(
'class'=»'ext.xyz.XyzBehavior',
'property1'=»'value1',
'property2'=»'value2',
),
);
}
שימוש בוידג'טים בדרך כלל נעשה בקבצי תצוגה. נניח ומחלקת הוידג'ט XyzClass
שייכת להרחבה xyz
, אנו יכולים להשתמש בו בתוך קובץ תצוגה בצורה הבאה,
// וידג'ט שאינו דורש תוכן
«?php $this-»widget('ext.xyz.XyzClass', array(
'property1'=»'value1',
'property2'=»'value2')); ?»
// וידג'ט שדורש תוכן
«?php $this-»beginWidget('ext.xyz.XyzClass', array(
'property1'=»'value1',
'property2'=»'value2')); ?»
...תוכן הוידג'ט....
«?php $this-»endWidget(); ?»
שימוש בפעולות נעשה על ידי הקונטרולרים בכדי לענות על בקשות משתמש ספציפיות. נניח ומחלקת הפעולה XyzClass
השייכת להרחבה בשם xyz
, אנו יכולים להשתמש בה על ידי דריסה של המתודה CController::actions במחלקה של הקונטרולר:
class TestController extends CController
{
public function actions()
{
return array(
'xyz'=»array(
'class'=»'ext.xyz.XyzClass',
'property1'=»'value1',
'property2'=»'value2',
),
// פעולות נוספות
);
}
}
לאחר מכן, ניתן לגשת לפעולה על ידי הניתוב test/xyz
.
שימוש פילטרים נעשה גם כן על ידי הקונטרולרים. המטרה העיקרית שלהם היא הרצתם לפני ואחרי פעולות מסויימות בכדי לבצע בדיקות או שינויים אחרים. נניח ומחלקת הפילטר בשם XyzClass
השייכת להרחבה בשם xzy
, אנו יכולים להשתמש בו על ידי דריסה של המתודה CController::filters במחלקת הקונטרולר:
class TestController extends CController
{
public function filters()
{
return array(
array(
'ext.xyz.XyzClass',
'property1'=»'value1',
'property2'=»'value2',
),
// פילטרים נוספים
);
}
}
בדוגמא למעלה, אנו יכולים להשתמש באופרטורים +, - באלמנט הראשון במערך בכדי לצרף את הפילטר למספר פעולות בלבד. למידע נוסף יש לקרוא את הדוקומנטציה אודות CController.
קונטרולר מספק סט של פעולות שניתנות לבקשה על ידי המשתמשים. בכדי להשתמש בהרחבה לקונטרולר, אנו צריכים להגדיר את המאפיין CWebApplication::controllerMap בקובץ הגדרות האפליקציה:
return array(
'controllerMap'=»array(
'xyz'=»array(
'class'=»'ext.xyz.XyzClass',
'property1'=»'value1',
'property2'=»'value2',
),
// קונטרולרים נוספים
),
);
לאחר מכן, הפעולה a
ניתנת לגישה על ידי ניתוב xyz/a
.
ולידטור בדרך כלל משומש בתוך מחלקת מודל (אחת שיורשת מהמחלקה CFormModel או CActiveRecord).
נניח וישנה מחלקת ולידטור בשם XyzClass
השייכת להרחבה בשם xyz
, אנו יכולים להשתמש בה על ידי דריסה של המתודה CModel::rules במחלקת המודל שלנו:
class MyModel extends CActiveRecord // or CFormModel
{
public function rules()
{
return array(
array(
'attr1, attr2',
'ext.xyz.XyzClass',
'property1'=»'value1',
'property2'=»'value2',
),
// חוקי אימות נתונים נוספים
);
}
}
הרחבות מסוף הפקודות בדרך כלל משפרת את הכלי yiic
בפקודה נוספת. נניח שיש לנו מחלקה לפקודה XyzClass
השייכת להרחבה xyz
, אנו יכולים להשתמש בה על ידי הגדרת ההגדרות למסוף הפקודות באפליקציה:
return array(
'commandMap'=»array(
'xyz'=»array(
'class'=»'ext.xyz.XyzClass',
'property1'=»'value1',
'property2'=»'value2',
),
// פקודות נוספות
),
);
לאחר מכן, אנו יכולים להשתמש בכלי yiic
המכיל פקודה חדשה בשם xyz
.
» Note|הערה: קובץ הגדרות של מסוף הפקודות הוא שונה מקובץ ההגדרות של אפליקצית ווב. במידה ואפליקציה נוצרה בעזרת פקודת yiic webapp
, קובץ ההגדרות של מסוף הפקודות protected/yiic
הינו protected/config/console.php
, בזמן שקובץ ההגדרות לאפליקצית ווב הינו protected/config/main.php
.
אנא קרא את החלק אודות מודולים וכיצד לעבוד עמם.
בכדי להשתמש רכיב כללי, אנו קודם צריכים להוסיף את קובץ המחלקה שלו על ידי שימוש ב
Yii::import('ext.xyz.XyzClass');
לאחר מכן, אנו יכולים ליצור אובייקט של המחלקה, להגדיר את המאפיינים שלו, ולקרוא למתודות אשר נמצאות בו. כמו כן אנו יכולים להרחיב אותו כדי ליצור תת מחלקה חדשה.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.