Files
yii/docs/guide/ru/extension.integration.txt
2012-03-05 20:37:50 -05:00

86 lines
5.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Использование сторонних библиотек
=================================
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
модели, валидацию и т.д.
<div class="revision">$Id: extension.integration.txt 3431 2011-11-03 00:53:44Z alexander.makarow@gmail.com $</div>