在同一个项目中使用Yii1和Yii2

Mik*_*oss 7 yii yii2 yii2-advanced-app

我在Yii1.x有一个项目,现在我正在使用Yii2进行相同的项目

项目层次结构就是这样的

Project1(yii1)/all yii files +  project2(yii2)

project2(yii2)/frontend + /common + /backend
Run Code Online (Sandbox Code Playgroud)

现在我想知道,如果是可以用project2/common/modelsproject1/protected/controllers

我怎样才能完成这项任务?

谢谢

aro*_*hev 7

我不建议这样做,而是在Yii2中完全重写旧应用程序.

但是在部分迁移的情况下,请阅读官方指南中的特殊主题部分中的这一段.

以下是一些重要的代码片段:

1)修改输入脚本:

// include the customized Yii class described below
require(__DIR__ . '/../components/Yii.php');

// configuration for Yii 2 application
$yii2Config = require(__DIR__ . '/../config/yii2/web.php');
new yii\web\Application($yii2Config); // Do NOT call run()

// configuration for Yii 1 application
$yii1Config = require(__DIR__ . '/../config/yii1/main.php');
Yii::createWebApplication($yii1Config)->run();
Run Code Online (Sandbox Code Playgroud)

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
{
    // copy-paste the code from YiiBase (1.x) here
}

Yii::$classMap = include($yii2path . '/classes.php');
// register Yii 2 autoloader via Yii 1
Yii::registerAutoloader(['Yii', 'autoload']);
// create the dependency injection container
Yii::$container = new yii\di\Container;
Run Code Online (Sandbox Code Playgroud)

Yii课程用法:

echo get_class(Yii::app()); // outputs 'CWebApplication'
echo get_class(Yii::$app);  // outputs 'yii\web\Application'
Run Code Online (Sandbox Code Playgroud)