Використання сторонніх бібліотек

Yii спочатку спроектований таким чином, щоб використання сторонніх бібліотек з метою розширення функціоналу Yii, відбувалося легко і невимушено. Дуже часто при використанні в роботі сторонніх бібліотек, розробники стикаються з проблемами іменування класів і підключення файлів. Оскільки всі класи Yii мають префікс C, то ймовірність виникнення конфліктів імен істотно нижче. А завдяки тому, що для підключення файлів Yii використовує автозавантаження SPL, робота з бібліотеками, що використовують для підключення файлів класів цей механізм автозавантаження або ж відносний шлях підключення в РНР (PHP include path), стає істотно приємніше.

Нижче наведено приклад, що ілюструє використання в Yii-додатку компонента Zend_Search_Lucene із Zend framework.

Насамперед, розпаковуємо реліз з Zend framework в папку protected/vendors, де protected — це базова директорія додатку. Переконайтеся в тому, що файл protected/vendors/Zend/Search/Lucene.php існує.

Далі, на самому початку класу контролера, додаємо рядок:



Код, наведений вище, підключає файл класу Lucene.php. Оскільки використовується відносний шлях, то необхідно змінити відносний шлях підключення в РНР (PHP include path) таким чином, щоб додаток міг знайти файл. Р обиться це шляхом виклику методу Yii::import перед require_once.

Після того, як зроблено все описане, можна використовувати клас Lucene в діях контролера наступним чином:



Підключення бібліотек, що використовують простори імен

Для того, щоб підключити бібліотеку, що використовує простір імен відповідно до угоди PSR-0 (наприклад, Zend Framework 2 або Symfony2), необхідно зареєструвати її корінь як псевдонім шляху.

У якості прикладу будемо використовувати Imagine. Якщо ми скопіюємо директорію Imagine в protected/vendors, то використовувати бібліотеку можна буде наступним чином:



У наведеному вище коді імʼя заданого нами псевдоніма має відповідати першій частині простору імен, яке використовується в бібліотеці.

Використання сторонніх автозавантажувачів

Деякі сторонні бібліотеки (наприклад PHPUnit) використовують свої власні автозавантажувачі класів, які виконують підключення файлу класа за правилами, які відрізняються від тих, що використовуються автозавантажувачем у Yii. Оскільки Yii використовує шлях підключення PHP як "останнє джерело" файлів класів, реєстрація таких стороннії автозавантажувачів може призвести до Попередження PHP (Warning):



Для уникнення такої проблеми - переконайтеся, що будь-який сторонній автозавантажувач класів зареєстрований до автозавантажувача Yii:



Якщо сторонній автозавантажувач классів йде як окрема функція або метод, ви можете використовувати Yii::registerAutoloader() для його реєстрації. У цьому випадку Yii зареєструє його перед власним автозавантажувачем автоматично.



Ви також можете уникнути проблем із сторонніми автозавантажувачами, відключаючи використання шляху підключення PHP перед виконанням додатка за допомогою параметра YiiBase::$enableIncludePath рівним false:



Використання Yii у сторонніх системах

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



Даний код дуже схожий на той, який використовується в index.php звичайного додатку. Відмінність у тому, що після створення екземпляра додатку не викликається метод run().

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