Использование сторонних библиотек
=================================

Yii изначально спроектирован таким образом, чтобы использование сторонних библиотек
с целью расширения функциональности Yii, происходило легко и непринужденно.
Очень часто при использовании в работе сторонних библиотек разработчики сталкиваются с проблемами
именования классов и подключения файлов. Поскольку все классы Yii имеют префикс `C`, то вероятность
возникновения конфликтов имён существенно ниже. А благодаря тому, что для подключения файлов Yii
использует [автозагрузку SPL](http://php.net/manual/en/function.spl-autoload.php), работа с библиотеками,
использующими для подключения файлов классов этот механизм автозагрузки или же относительный путь
подключения в РНР (PHP include path), становится существенно приятнее.

Ниже приведён пример, иллюстрирующий использование в Yii приложении компонента
[Zend_Search_Lucene](http://www.zendframework.com/manual/en/zend.search.lucene.html)
из [Zend Framework](http://www.zendframework.com).

Первым делом, распаковываем релиз с Zend Framework в директорию `protected/vendors`, где `protected` —
это [базовая директория приложения](/doc/guide/basics.application#application-base-directory).
Убедитесь в том, что файл `protected/vendors/Zend/Search/Lucene.php` существует.

Далее, в самом начале файла, содержащего класс контроллера, добавляем строку:

~~~
[php]
Yii::import('application.vendors.*');
require_once('Zend/Search/Lucene.php');
~~~

Код, приведённый выше, подключает файл `Lucene.php`. Поскольку используется относительный путь,
то необходимо изменить относительный путь подключения в РНР (PHP include path) таким образом, чтобы приложение могло
найти файл. Делается это путём вызова метода `Yii::import` перед  `require_once`.

После того как проделано всё описанное, можно использовать класс `Lucene` в действиях контроллера следующим образом:

~~~
[php]
$lucene=new Zend_Search_Lucene($pathOfIndex);
$hits=$lucene->find(strtolower($keyword));
~~~

Подключение библиотек, использующих пространства имён
-----------------------------------------------------

Для того чтобы подключить библиотеку, использующую пространство имён согласно соглашению
[PSR-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md)
(например, Zend Framework 2 или Symfony2), необходимо зарегистрировать её корень как псевдоним пути.

В качестве примера будем использовать [Imagine](https://github.com/avalanche123/Imagine).
Если мы скопируем директорию `Imagine` в `protected/vendors`, то использовать библиотеку можно будет следующим
образом:

~~~
[php]
Yii::setPathOfAlias('Imagine',Yii::getPathOfAlias('application.vendors.Imagine'));

// Далее стандартный код из руководства Imagine:
// $imagine = new Imagine\Gd\Imagine();
// и т.д.
~~~

В приведённом выше коде имя заданного нами псевдонима должно соответствовать первой части пространства имён, которое
используется в библиотеке.

Использование Yii в сторонних системах
--------------------------------------

Yii может быть использован как библиотека для разработки и улучшения
сторонних систем, таких как WordPress, Joomla и других. Для того чтобы
воспользоваться Yii, необходимо включить приведённый ниже код в стороннюю систему:

~~~
[php]
require_once('путь/к/yii.php');
Yii::createWebApplication('путь/к/config.php');
~~~

Приведённый код очень похож на тот, который используется в `index.php` обычного
приложения. Отличие состоит в том, что после создания экземпляра приложения не вызывается
метод `run()`.

Теперь при разработке сторонней системы можно использовать большинство
возможностей Yii. Например, для получения доступа к экземпляру приложения
можно использовать `Yii::app()`. Также можно использовать DAO, ActiveRecord
модели, валидацию и т.д.