Порядок використання розширень, як правило, включає три кроки:
extensions/xyz
базової директорії додатка,
де xyz
— імʼя розширення;Кожне розширення унікально ідентифікується по імені. Якщо розширення називається xyz
, то, використовуючи псевдонім шляху ext.xyz
, ми завжди можемо визначити папку, в якій зберігаються файли даного розширення.
Різні розширення висувають різні вимоги до імпорту, налаштуванню і порядку використання. Нижче, ми наведемо кілька загальних варіантів використання розширень відповідно до класифікації, представленої в огляді.
Перед тим, як розповісти про використання сторонніх розширень, варто згадати бібліотеку розширень Zii — набір розширень, що розробляється командою Yii і включається у кожну нову версію.
При використанні розширення 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
.
Поведінка може бути використана у будь-якому компоненті. Робиться це у два кроки: приєднання до компоненту і виклик методу поведінки з компонента. Наприклад:
// $name відповідає унікальній поведінці компонента
$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')); ?>
// віджет, який може мати внутрішній вміст
$this->beginWidget('ext.xyz.XyzClass', array(
'property1'=>'value1',
'property2'=>'value2')); ?>
…вміст віджету…
$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
розширення xyz
можна використовувати шляхом перевизначення методу 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
.
Примітка: Консольний додаток, як правило, використовує інший файл конфігурації ніж веб-додаток. Якщо додаток був створений командою консолі
yiic webapp
, то конфігураційний файл для консоліprotected/yiic
знаходиться уprotected/config/console.php
, а конфігурація веб-додатка — вprotected/config/main.php
.
Інформація про порядок використання і створення модулів представлена у розділі Модуль.
Щоб використовувати загальний компонент, потрібно для початку включити його клас:
Yii::import('ext.xyz.XyzClass');
Тепер ми можемо створювати екземпляр цього класу, налаштувати його властивості, викликати його методи. Крім того, можна його розширити для створення дочірніх класів.