mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 02:56:55 +01:00
260 lines
12 KiB
Plaintext
260 lines
12 KiB
Plaintext
Використання розширень
|
||
======================
|
||
|
||
Порядок використання розширень, як правило, включає три кроки:
|
||
|
||
1. Завантажити розширення з [репозиторію](http://www.yiiframework.com/extensions/) Yii;
|
||
2. Розпакувати розширення в підпапку `extensions/xyz`
|
||
[базової директорії додатка](/doc/guide/basics.application#application-base-directory),
|
||
де `xyz` — імʼя розширення;
|
||
3. Підключити, налаштувати і використовувати розширення.
|
||
|
||
Кожне розширення унікально ідентифікується по імені. Якщо розширення називається `xyz`, то, використовуючи псевдонім шляху `ext.xyz`, ми завжди можемо визначити папку, в якій зберігаються файли даного розширення.
|
||
|
||
Різні розширення висувають різні вимоги до імпорту, налаштуванню і порядку використання. Нижче, ми наведемо кілька загальних варіантів використання розширень відповідно до класифікації, представленої в [огляді](/doc/guide/extension.overview).
|
||
|
||
Розширення Zii
|
||
--------------
|
||
|
||
Перед тим, як розповісти про використання сторонніх розширень, варто згадати бібліотеку розширень Zii — набір розширень, що розробляється командою Yii і включається у кожну нову версію.
|
||
|
||
При використанні розширення Zii, необхідно звертатися до відповідних класів використовуючи псевдонім шляху виду `zii.path.to.ClassName`. Тут `zii` - зумовлений в Yii маршрут, що відповідає кореневій директорії бібліотеки Zii. Приміром, щоб використовувати [CGridView], необхідно використовувати в шаблоні представлення наступний код:
|
||
|
||
~~~
|
||
[php]
|
||
$this->widget('zii.widgets.grid.CGridView', array(
|
||
'dataProvider'=>$dataProvider,
|
||
));
|
||
~~~
|
||
|
||
Компонент додатка
|
||
-----------------
|
||
|
||
Для використання [компонента додатка](/doc/guide/basics.application#application-component) у першу чергу необхідно змінити [конфігурацію додатка](/doc/guide/basics.application#application-component), додавши новий елемент у властивість `components`:
|
||
|
||
~~~
|
||
[php]
|
||
return array(
|
||
// 'preload'=>array('xyz',…),
|
||
'components'=>array(
|
||
'xyz'=>array(
|
||
'class'=>'ext.xyz.XyzClass',
|
||
'property1'=>'value1',
|
||
'property2'=>'value2',
|
||
),
|
||
// інші налаштування компонентів
|
||
),
|
||
);
|
||
~~~
|
||
|
||
Тепер можна звертатися до компонента у будь-якому місці додатка через `Yii::app()->xyz`. Компонент буде створено *ліниво* (тобто у момент першого звернення), якщо, звичайно, ми не вкажемо його у властивості `preload`.
|
||
|
||
Поведінка
|
||
---------
|
||
|
||
[Поведінка](/doc/guide/basics.component#component-behavior) може бути використана у будь-якому компоненті. Робиться це у два кроки: приєднання до компоненту і виклик методу поведінки з компонента. Наприклад:
|
||
|
||
~~~
|
||
[php]
|
||
// $name відповідає унікальній поведінці компонента
|
||
$component->attachBehavior($name,$behavior);
|
||
// test() є методом $behavior
|
||
$component->test();
|
||
~~~
|
||
|
||
Найчастіше поведінка приєднується до компонента з використанням конфігурації, а не викликом методу `attachBehavior`. Приміром, щоб приєднати поведінку до [компоненту додатка](/doc/guide/basics.application#application-component), ми можемо використовувати наступну [конфігурацію](/doc/guide/basics.application#application-configuration):
|
||
|
||
~~~
|
||
[php]
|
||
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()`. При ініціалізації, класи автоматично приєднають поведінки, оголошені у цьому методі. Наприклад:
|
||
|
||
~~~
|
||
[php]
|
||
public function behaviors()
|
||
{
|
||
return array(
|
||
'xyz'=>array(
|
||
'class'=>'ext.xyz.XyzBehavior',
|
||
'property1'=>'value1',
|
||
'property2'=>'value2',
|
||
),
|
||
);
|
||
}
|
||
~~~
|
||
|
||
Віджет
|
||
------
|
||
|
||
Віджети в основному використовуються у представленнях. Віджетом класу `XyzClass` розширення `xyz`, можна скористатися у представленні наступним чином:
|
||
|
||
~~~
|
||
[php]
|
||
// віджет без внутрішнього вмісту
|
||
<?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(); ?>
|
||
~~~
|
||
|
||
Дія
|
||
---
|
||
|
||
[Дії](/doc/guide/basics.controller#action) використовуються в [контролерах](/doc/guide/basics.controller) для обробки запитів користувача. Дія класу `XyzClass` розширення `xyz` можна використовувати шляхом перевизначення методу [CController::actions] класу нашого контролера:
|
||
|
||
~~~
|
||
[php]
|
||
class TestController extends CController
|
||
{
|
||
public function actions()
|
||
{
|
||
return array(
|
||
'xyz'=>array(
|
||
'class'=>'ext.xyz.XyzClass',
|
||
'property1'=>'value1',
|
||
'property2'=>'value2',
|
||
),
|
||
// інші дії
|
||
);
|
||
}
|
||
}
|
||
~~~
|
||
|
||
Тепер до дії можна звернутися по [маршруту](/doc/guide/basics.controller#route) `test/xyz`.
|
||
|
||
Фільтри
|
||
-------
|
||
|
||
[Фільтри](/doc/guide/basics.controller#filter) також використовуються в [контролерах](/doc/guide/basics.controller). В основному вони використовуються в [діях](/doc/guide/basics.controller#action) для здійснення перед- і пост-обробки користувальницького запиту. Фільтр класу `XyzClass` розширення `xyz` можна використовувати шляхом перевизначення методу [CController::filters] у нашому класі контролера:
|
||
|
||
~~~
|
||
[php]
|
||
class TestController extends CController
|
||
{
|
||
public function filters()
|
||
{
|
||
return array(
|
||
array(
|
||
'ext.xyz.XyzClass',
|
||
'property1'=>'value1',
|
||
'property2'=>'value2',
|
||
),
|
||
// інші фільтри
|
||
);
|
||
}
|
||
}
|
||
~~~
|
||
|
||
Вище ми можемо використовувати оператори '+' і '-' в першому елементі масиву для застосування фільтра тільки до певних дій. Детальніше ознайомитися можна в документації до [CController].
|
||
|
||
Контролер
|
||
---------
|
||
|
||
[Контролер](/doc/guide/basics.controller) надає набір дій, які можуть бути запитані користувачем. Для використання розширення контролера необхідно налаштувати властивість [CWebApplication::controllerMap] в [конфігурації додатка](/doc/guide/basics.application#application-configuration):
|
||
|
||
~~~
|
||
[php]
|
||
return array(
|
||
'controllerMap'=>array(
|
||
'xyz'=>array(
|
||
'class'=>'ext.xyz.XyzClass',
|
||
'property1'=>'value1',
|
||
'property2'=>'value2',
|
||
),
|
||
// інші контролери
|
||
),
|
||
);
|
||
~~~
|
||
|
||
Тепер до дії `a` контролера можна звернутися через [маршрут](/doc/guide/basics.controller#route) `xyz/a`.
|
||
|
||
Валідатор
|
||
---------
|
||
|
||
Валідатор застосовується у класі [моделі](/doc/guide/basics.model) (що наслідує або [CFormModel] або [CActiveRecord]). Клас валідатора `XyzClass` розширення `xyz` використовується шляхом перевизначення методу [CModel::rules] у нашому класі моделі:
|
||
|
||
~~~
|
||
[php]
|
||
class MyModel extends CActiveRecord // or CFormModel
|
||
{
|
||
public function rules()
|
||
{
|
||
return array(
|
||
array(
|
||
'attr1, attr2',
|
||
'ext.xyz.XyzClass',
|
||
'property1'=>'value1',
|
||
'property2'=>'value2',
|
||
),
|
||
// інші правила перевірки
|
||
);
|
||
}
|
||
}
|
||
~~~
|
||
|
||
Команда консолі
|
||
---------------
|
||
|
||
Розширення [консольної команди](/doc/guide/topics.console), як правило, використовується для додавання нової команди в утиліті `yiic`. Консольну команду `XyzClass` розширення `xyz` можна використовувати, налаштувавши конфігурацію консольного додатка:
|
||
|
||
~~~
|
||
[php]
|
||
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`.
|
||
|
||
Модуль
|
||
------
|
||
|
||
Інформація про порядок використання і створення модулів представлена у розділі [Модуль](/doc/guide/basics.module#using-module).
|
||
|
||
Загальний компонент
|
||
-------------------
|
||
|
||
Щоб використовувати загальний [компонент](/doc/guide/basics.component), потрібно для початку включити його клас:
|
||
|
||
~~~
|
||
Yii::import('ext.xyz.XyzClass');
|
||
~~~
|
||
|
||
Тепер ми можемо створювати екземпляр цього класу, налаштувати його властивості, викликати його методи. Крім того, можна його розширити для створення дочірніх класів.
|
||
|
||
<div class="revision">$Id: extension.use.txt 2890 2011-01-18 15:58:34Z qiang.xue $</div> |