将Yii2控制器与Yii1控制器相结合

zil*_*log 5 migration controller yii yii2

我有一个相当大的Yii1应用程序,我想慢慢迁移到Yii2.我想逐渐这样做.

我已按照Yii2和Yii1集成手册中的说明进行操作.

我的应用程序运行正常.

我也尝试了yii2-yii-bridge技巧,它似乎也经过一些调整后才能工作.

我的问题是,既然我知道我的应用程序中有两个版本的Yii,我该如何开始添加Yii2样式控制器?

如果我创建一个简单的Yii2样式控制器,像这样:

namespace app\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;


class SecondController extends Controller {

    public function behaviors()
    {
        return [
            'access' => [
                'class' => \yii\filters\AccessControl::className(),
                'only' => ['index'],
                'rules' => [
                    // allow authenticated users
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                    // everything else is denied
                ],
            ],
        ];
    }

    public function actionIndex()
    {
        Yii::trace("(!!!) SecondController::index called!!!");
        return "SecondController::index!!";
    }

} // class
Run Code Online (Sandbox Code Playgroud)

使用我用的URL方案,我不能访问它,所以HTTP://local.url/second/index似乎并没有被发现.

但是,如果我按照我一直以来的方式创建Yii1样式,它就可以很好地解决:

class ThirdController extends Controller {

    public function accessRules() {
        return array(
            array('allow',
                'actions' => array('index'),
                'users' => array('*'),
            ),
        );
    }


    public function actionIndex() {
        Yii::trace("ThirdController::index called!!!");
        return "ThirdController::index!!";
    }

}
Run Code Online (Sandbox Code Playgroud)

似乎默认的url映射<controller>/<action>无法处理命名空间控制器是否有办法解决这个问题?

SiZ*_*iZE 0

集成的主要目标是使用仅在 Yii 2 中可用的一些功能。假设您仍然有一个正在运行的 Yii 1 应用程序。但是您添加了一些具有新功能的外部库。

为了能够使用 Yii 2 的控制器,您应该与 Yii 1 核心进行深度集成。

我只能建议将请求拆分到应用程序索引文件,例如在 .htaccess 中,并在 Yii 2 中创建一些新功能。