שימוש בהרחבות

שימוש בהרחבה בדרך כלל כולל את שלושת השלבים הבאים:

  1. הורדת ההרחבה מספרית ההרחבות של Yii.
  2. חילוץ קבצי ההרחבה תחת התיקיה extensions/xyz הנמצאת בתיקיה ראשית של האפליקציה, כש xyzהינו שם ההרחבה.
  3. ייבוא, הגדרה ושימוש בהרחבה.

לכל הרחבה יש שם המייחד אותה משאר ההרחבות. בהתחשב שיש לנו הרחבה בשם xyz, אנו תמיד יכולים להשתמש בנתיב המקוצר ext.xyz בכדי לאתר את התיקיה הראשית שלה המכילה את כל הקבצים של xyz.

» Note|הערה: הנתיב המקוצר ext קיים מגרסא 1.0.8. קודם לכן, היה צורך להשתמש ב application.extensions בכדי להתייחס לתיקיה המכילה את כל ההרחבות. בתיאור הבא, אנו מניחים ש ext מוגדר. יהיה צורך בלהחליף אותו עם application.extensions במידה והינך משתמש בגרסא 1.0.7 ומטה.

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

1. הרחבות Zii

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

בעת שימוש בהרחבה מספרית Zii, יש צורך להתייחס למחקה על ידי שימוש בנתיב מקוצר בפורמטר של zii.path.to.ClassName. במקרה הזה, הנתיב הראשי zii כבר הוגדר מראש על ידי Yii. נתיב זה מתייחס לתיקיה הראשית של ספריית ה Zii. לדוגמא, כדי להשתמש ב CGridView, אנו נשתמש בקוד הבא בתוך קובץ תצוגה כשאנו מתייחסים להרחבה:

$thiswidget('zii.widgets.grid.CGridView', array(
    'dataProvider'$dataProvider,
));

2. רכיב באפליקציה

בכדי להשתמש ברכיב אפליקציה, אנו קודם צריכים לשנות את הגדרות האפליקציה על ידי הוספת רשומה (אלמנט) חדשה למאפיין של components, כפי שמוצג בדוגמא הבאה:

return array(
    // 'preload'=»array('xyz',...),
    'components'array(
        'xyz'array(
            'class''ext.xyz.XyzClass',
            'property1''value1',
            'property2''value2',
        ),
        // הגדרות רכיבים נוספים
    ),
);

לאחר מכן, אנו יכולים לגשת לרכיב בכל מקום על ידי Yii::app()-»xyz. הרכיב יווצר בצורה עצלה (זאת אומרת יווצר כשהוא נקרא בפעם הראשונה), אלה אם כן אנו נרשום את שמו במאפיין של preload בהגדרות האפליקציה.

3. התנהלות/התנהגות

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

// הפרמטר הראשון הוא יחודי ומשמש לצורך זיהוי ההתנהלות
$componentattachBehavior($name,$behavior);
// המתודה test נמצאת במחלקה של $behavior
$componenttest();

בדרך כלל, התנהלות מצורפת לרכיב דרך הגדרות ולא על ידי קריאה למתודה 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',
        ),
    );
}

4. וידג'ט

שימוש בוידג'טים בדרך כלל נעשה בקבצי תצוגה. נניח ומחלקת הוידג'ט XyzClass שייכת להרחבה xyz, אנו יכולים להשתמש בו בתוך קובץ תצוגה בצורה הבאה,

// וידג'ט שאינו דורש תוכן
«?php $thiswidget('ext.xyz.XyzClass', array(
    'property1''value1',
    'property2''value2')); ?»
 
// וידג'ט שדורש תוכן
«?php $thisbeginWidget('ext.xyz.XyzClass', array(
    'property1''value1',
    'property2''value2')); ?»
 
...תוכן הוידג'ט....
 
«?php $this-»endWidget(); ?»

5. פעולה

שימוש בפעולות נעשה על ידי הקונטרולרים בכדי לענות על בקשות משתמש ספציפיות. נניח ומחלקת הפעולה 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.

6. פילטר

שימוש פילטרים נעשה גם כן על ידי הקונטרולרים. המטרה העיקרית שלהם היא הרצתם לפני ואחרי פעולות מסויימות בכדי לבצע בדיקות או שינויים אחרים. נניח ומחלקת הפילטר בשם XyzClass השייכת להרחבה בשם xzy, אנו יכולים להשתמש בו על ידי דריסה של המתודה CController::filters במחלקת הקונטרולר:

class TestController extends CController
{
    public function filters()
    {
        return array(
            array(
                'ext.xyz.XyzClass',
                'property1''value1',
                'property2''value2',
            ),
            // פילטרים נוספים
        );
    }
}

בדוגמא למעלה, אנו יכולים להשתמש באופרטורים +, - באלמנט הראשון במערך בכדי לצרף את הפילטר למספר פעולות בלבד. למידע נוסף יש לקרוא את הדוקומנטציה אודות CController.

7. קונטרולר

קונטרולר מספק סט של פעולות שניתנות לבקשה על ידי המשתמשים. בכדי להשתמש בהרחבה לקונטרולר, אנו צריכים להגדיר את המאפיין CWebApplication::controllerMap בקובץ הגדרות האפליקציה:

return array(
    'controllerMap'array(
        'xyz'array(
            'class''ext.xyz.XyzClass',
            'property1''value1',
            'property2''value2',
        ),
        // קונטרולרים נוספים
    ),
);

לאחר מכן, הפעולה a ניתנת לגישה על ידי ניתוב xyz/a.

8. ולידטור (אימות נתונים)

ולידטור בדרך כלל משומש בתוך מחלקת מודל (אחת שיורשת מהמחלקה 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',
            ),
            // חוקי אימות נתונים נוספים
        );
    }
}

9. מסוף פקודות

הרחבות מסוף הפקודות בדרך כלל משפרת את הכלי 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.

10. מודול

אנא קרא את החלק אודות מודולים וכיצד לעבוד עמם.

11. רכיב כללי

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

Yii::import('ext.xyz.XyzClass');

לאחר מכן, אנו יכולים ליצור אובייקט של המחלקה, להגדיר את המאפיינים שלו, ולקרוא למתודות אשר נמצאות בו. כמו כן אנו יכולים להרחיב אותו כדי ליצור תת מחלקה חדשה.

«div class="revision"»$Id: extension.use.txt 1780 2010-02-01 20:32:50Z qiang.xue $«/div»

Be the first person to leave a comment

Please to leave your comment.