Використання розширень
======================

Порядок використання розширень, як правило, включає три кроки:

  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), потрібно для початку включити його клас:

~~~
[php]
Yii::import('ext.xyz.XyzClass');
~~~

Тепер ми можемо створювати екземпляр цього класу, налаштувати його властивості, викликати його методи. Крім того, можна його розширити для створення дочірніх класів.