mirror of
https://github.com/yiisoft/yii.git
synced 2026-03-12 02:56:55 +01:00
62 lines
5.6 KiB
Plaintext
62 lines
5.6 KiB
Plaintext
Використання сторонніх бібліотек
|
||
================================
|
||
|
||
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> |