Рейтинг:  0 / 5

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Использование Yii 2 в связке с Yii 1

Использование 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'
Log in to comment