16 KiB
Робота із стороннім кодом
Час від часу, вам, можливо, буде потрібно використовувати деякий сторонній код в своїх Yii додатках. Або ви маєте потребу використовувати Yii, як бібліотеку в деяких сторонніх системах. У цьому розділі, ми покажемо як досягти цих цілей.
Використання сторонніх бібліотек в Yii
Для використання сторонньої бібліотеки в Yii додатку, ви, в основному, повинні переконатися, що класи в бібліотеці правильно підключені або можуть завантажуватися автоматично.
<<<<<<< HEAD
Використання пакетів Composer
Багато сторонніх бібліотек випущені у вигляді пакетів Composer. Ви можете встановити такі бібліотеки, виконавши два прості кроки:
- змінити файл
composer.jsonвашого додатку і вказати які пакети Composer необхідно встановити. - виконати команду
composer installдля встановлення зазначених пакетів.
Класи встановлених пакетів Composer можуть бути автоматично завантажені, використовуючи автозавантажувача Composer.
Використання пакунків Composer
Багато сторонніх бібліотек випущені у вигляді пакунків Composer. Ви можете встановити такі бібліотеки, виконавши два прості кроки:
- змінити файл
composer.jsonвашого додатку і вказати, які пакунки Composer необхідно встановити. - виконати команду
composer installдля встановлення зазначених пакунків.
Класи встановлених пакунків Composer можуть бути автоматично завантажені, використовуючи автозавантажувача Composer.
master Переконайтися, що вхідний скрипт вашого додатку містить наступні рядки для встановлення автозавантажувача Composer:
// встановлення автозавантажувача Composer
require(__DIR__ . '/../vendor/autoload.php');
// підключення файлу класа Yii
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
Використовуйте завантажені бібліотеки
<<<<<<< HEAD Якщо бібліотека не випущена в якості пакету Composer, ви повинні слідувати згідно її інструкції по встановленню.
Якщо бібліотека не випущена в якості пакунку Composer, ви повинні слідувати згідно її інструкції по встановленню.
master У більшості випадків, вам потрібно буде завантажити випущений файл вручну і розархівувати його в каталог
BasePath/vendor, деBasePathпредставляє собою основний шлях вашого додатку.
Якщо бібліотека використовує свій власний автозавантажувач класів, ви можете підключити його у
вхідному скрипті вашого додатку. Рекомендується підключити його перед тим,
як буде підключено файл Yii.php, щоб автозавантажувач Yii мав приорітет при автоматичному завантаженні класів.
Якщо бібліотека не надає автозавантажувача класів, але іменування її класів відповідає
PSR-4 - ви можете використовувати автозавантажувач Yii для завантаження її класів.
Все, що вам потрібно зробити, це тільки оголосити системний псевдонім
для кожного кореневого простору імен, що використовується в цих класах. Для прикаду, припустимо, що ви хочете встановити
бібліотеку в каталог vendor/foo/bar, і класи бібліотеки знаходяться в кориневому просторі імен xyz.
Ви можете включити наступний код в конфігурації вашого додатку:
[
'aliases' => [
'@xyz' => '@vendor/foo/bar',
],
]
Якщо жоден з варіантів не підійшов, цілком ймовірно, що для використання бібліотеки потрібно налаштувати в конфігурації
директиву PHP include_path для коректного пошуку та підключення файлів класів.
Просто дотримуйтесь її інструкції з налаштування директиви PHP include_path.
В гіршому випадку, бібліотека вимагає явного підключення каждого файлу класу, тому ви можете використати наступний метод для підключення класів за вимогою:
- Визначіть, які класи входять до складу бібліотеки.
- Перерахуйте класи і шляхи до відповідних файлів в
Yii::$classMapу вхідному скрипті додатку. Наприклад,
Yii::$classMap['Class1'] = 'path/to/Class1.php';
Yii::$classMap['Class2'] = 'path/to/Class2.php';
Використання Yii в сторонніх системах
Оскільки в Yii організовано безліч корисних функцій, іноді вони можуть знадобитися при розробці або розширенні сторонніх систем, <<<<<<< HEAD таких як WordPress, Joomla, або додатки, розроблені з використанням іншого PHP фреймворку.
таких як WordPress, Joomla, або додатки, розроблені з використанням іншого PHP-фреймворку.
master Наприклад, ви можете використовувати клас yii\helpers\ArrayHelper або можливості Active Record в сторонніх системах. Для цього необхідно виконати два кроки: встановити Yii та bootstrap Yii.
Якщо стороння система використовує управління залежностями Composer, ви можете встановити Yii за допомогою наступних команд:
<<<<<<< HEAD composer global require "fxp/composer-asset-plugin:~1.0.0" composer require yiisoft/yii2 composer install
Перша команда встановлює composer asset plugin, який дозволяє керувати залежностями пакетів bower і npm через Composer. Навіть якщо ви захочете використовувати тільки прошарки бази даних або інші, не повʼязані ресурсами, можливості Yii, вам всерівно необхідно встановити даний пакет composer.
composer global require "fxp/composer-asset-plugin:~1.1.1"
composer require yiisoft/yii2
composer install
Перша команда встановлює composer asset plugin, який дозволяє керувати залежностями пакунків Bower і NPM через Composer. Навіть якщо ви захочете використовувати тільки прошарки бази даних або інші, не повʼязані ресурсами, можливості Yii, вам все-одно необхідно встановити даний пакунок composer.
Якщо ви бажаєте використовувати можливість публікації ресурсів Yii,
вам також слід додати наступну конфігурацію до розділу extra вашого файлу composer.json:
{
...
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
}
master Дивіться також загальний розділ про встановлення Yii, для отримання додаткової інформації про Composer та проблеми, які можуть виникнути під час встановлення.
В іншому випадку, ви можете завантажити файли релізу Yii і розархівувати його
в каталог BasePath/vendor.
Далі вам необхідно змінити вхідний скрипт сторонньої системи помістивши на його початок наступний код:
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
$yiiConfig = require(__DIR__ . '/../config/yii/web.php');
new yii\web\Application($yiiConfig); // НЕ ВИКЛИКАЙТЕ run() в цьому місці
Як ви бачите, цей код дуже схожий на код вхідного скрипта типового додатку Yii.
Єдина відмінність заключається в тому, що після створення екземпляру додатку, метод run() не викликається.
Це звʼязано з тим, що при виклику run(), Yii захоплює контроль над процесом обробки запиту, що в даному випадку
<<<<<<< HEAD
не є потрібним, так як цю задачу виконує вже існуючий додаток.
не є потрібним, оскільки цю задачу виконує вже наявний додаток.
master
Як і у випадку з Yii додатком, вам необхідно налаштувати екземпляр додатку, виходячи із середовища запущеної сторонньої системи.
Наприклад, щоб скористатися можливостями Active Record, необхідно налаштувати
компонент додатку db з налаштування підключення бази данних,
яка використовується сторонньою системою.
<<<<<<< HEAD Тепер ви можете використовувати більшість функцій Yii фреймворку. Наприклад, ви можете створювати класи Active Record і
Тепер ви можете використовувати більшість функцій фреймворку Yii. Наприклад, ви можете створювати класи Active Record і
master використовувати їх для роботи з базами даних.
Використання Yii 2 з Yii 1
Якщо попередньо ви використовували Yii 1, цілком ймовірно, що у вас є робочий додаток Yii 1. Замість того, щоб переписувати цілий додаток під Yii 2, ви можете просто його покращити, використовуючи деякі функції, що доступні тільки в Yii 2. Для цього потрібно виконати наступні дії.
<<<<<<< HEAD
Примітка: Yii 2 вимагає версію PHP 5.4 або вищу. Переконайтися, що і сервер і існуючий додаток підтримують її. ======= Note: Yii 2 вимагає версію PHP 5.4 або вищу. Переконайтися, що і сервер і наявний додаток підтримують її.
master
По-перше, встановіть Yii 2 до вашого поточного додатку, виконавши дії, описані в попередньому підрозділі.
По-друге, змініть вхідний скрипт додатку наступним чином,
// підключення модифікованого класу Yii, описаного нижче
require(__DIR__ . '/../components/Yii.php');
// налаштування додатку Yii 2
$yii2Config = require(__DIR__ . '/../config/yii2/web.php');
new yii\web\Application($yii2Config); // не викликайте run()
// налаштування додатку Yii 1
$yii1Config = require(__DIR__ . '/../config/yii1/main.php');
Yii::createWebApplication($yii1Config)->run();
<<<<<<< HEAD
Так як Yii 1 і Yii 2 використовують клас Yii, вам необхідно створити модифіковану версію, щоб обʼєднати їх.
Оскільки Yii 1 та Yii 2 використовують клас Yii, вам необхідно створити модифіковану версію, щоб обʼєднати їх.
master Наведений нижче код підключить модифікований файл класу
Yii, який може бути створений наступним чином.
$yii2path = '/path/to/yii2';
require($yii2path . '/BaseYii.php'); // Yii 2.x
$yii1path = '/path/to/yii1';
require($yii1path . '/YiiBase.php'); // Yii 1.x
class Yii extends \yii\BaseYii
{
// скопіюйте та вставте код з YiiBase (1.x) сюди
}
Yii::$classMap = include($yii2path . '/classes.php');
// реєстрація автозавантажувача Yii2 через Yii1
Yii::registerAutoloader(['Yii', 'autoload']);
// створення контейнера впровадження залежностей
Yii::$container = new yii\di\Container;
От і все! Тепер в будь-якому місці коду можна використовувати конструкцію Yii::$app для отримання доступу до
екземпляру класу додатку Yii 2, а з допомогою конструкції Yii::app() - до екземпляру класу додатку Yii 1:
echo get_class(Yii::app()); // виводить 'CWebApplication'
echo get_class(Yii::$app); // виводить 'yii\web\Application'