Использование Yii 2 в связке с Yii 1
Если в прошлом вам приходилось использовать Yii 1, не исключено, что у вас до сих пор где-то используются приложения на этой платформе. Вместо того, чтобы переписывать все приложение под Yii 2, может быть целесообразно расширить его используя отдельные функции, которые появились в Yii 2. Для этого нужно выполнить следующие действия.
Note: Yii 2 требует PHP 5.4 или выше. Убедитесь, что и сервер, и существующее приложение поддерживают это.
Во-первых, установите 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();
Так как класс Yii
используется и в Yii 1, и в Yii 2, нужно будет создать его модифицированную версию, обслуживающую обе версии фреймворка. В приведенном выше коде подключается модифицированный файл класса 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');
// регистрация автозагрузчика Yii 2 через Yii 1
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'