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
существует.
Далее, в самом начале файла, содержащего класс контроллера, добавляем строку:
Yii::import('application.vendors.*');
require_once('Zend/Search/Lucene.php');
Код, приведённый выше, подключает файл Lucene.php
. Поскольку используется относительный путь,
то необходимо изменить относительный путь подключения в РНР (PHP include path) таким образом, чтобы приложение могло
найти файл. Делается это путём вызова метода Yii::import
перед require_once
.
После того как проделано всё описанное, можно использовать класс Lucene
в действиях контроллера следующим образом:
$lucene=new Zend_Search_Lucene($pathOfIndex);
$hits=$lucene->find(strtolower($keyword));
Для того чтобы подключить библиотеку, использующую пространство имён согласно соглашению PSR-0 (например, Zend Framework 2 или Symfony2), необходимо зарегистрировать её корень как псевдоним пути.
В качестве примера будем использовать Imagine.
Если мы скопируем директорию Imagine
в protected/vendors
, то использовать библиотеку можно будет следующим
образом:
Yii::setPathOfAlias('Imagine',Yii::getPathOfAlias('application.vendors.Imagine'));
// Далее стандартный код из руководства Imagine:
// $imagine = new Imagine\Gd\Imagine();
// и т.д.
В приведённом выше коде имя заданного нами псевдонима должно соответствовать первой части пространства имён, которое используется в библиотеке.
Некоторые сторонние библиотеки, такие как PHPUnit, используют собственные загрузчики классов, не совместимые с Yii. Так как загрузчик классов Yii, если класс не удаётся найти, пробует загрузку из include path PHP, то регистрация сторонних загрузчиков может дать PHP Warning:
include(PHPUnit_Framework_TestCase.php) [function.include]: failed to open stream: No such file or directory
Для избежания данной проблемы стоит регистрировать сторонние загрузчики до загрузчика Yii:
require_once('PHPUnit/Autoload.php'); // register 3rd-party autoloader
require_once('/path/to/framework/yii.php'); // register Yii autoloader
...
Если сторонний загрузчик реализован в виде отдельной функции или метода, можно использовать Yii::registerAutoloader()
для его регистрации. В этом случае он будет зарегистриован до загрузчика Yii автоматически.
require_once('/path/to/framework/yii.php'); // регистрируем загрузчик Yii
...
Yii::registerAutoloader(array('SomeLibrary','autoload')); // регистрируем сторонний загрузчик
...
Ещё один способ избежать проблем со сторонними загрузчиками — запретить PHP include path выставив
YiiBase::$enableIncludePath
в false
до запуска приложения:
require_once('/path/to/framework/yii.php');
$configFile='/path/to/config/main.php';
Yii::$enableIncludePath = false; // запрещаем PHP include path
Yii::createWebApplication($configFile)->run();
Yii может быть использован как библиотека для разработки и улучшения сторонних систем, таких как WordPress, Joomla и других. Для того чтобы воспользоваться Yii, необходимо включить приведённый ниже код в стороннюю систему:
require_once('путь/к/yii.php');
Yii::createWebApplication('путь/к/config.php');
Приведённый код очень похож на тот, который используется в index.php
обычного
приложения. Отличие состоит в том, что после создания экземпляра приложения не вызывается
метод run()
.
Теперь при разработке сторонней системы можно использовать большинство
возможностей Yii. Например, для получения доступа к экземпляру приложения
можно использовать Yii::app()
. Также можно использовать DAO, ActiveRecord
модели, валидацию и т.д.
Found a typo or you think this page needs improvement?
Edit it on github !
Signup or Login in order to comment.