我有一个相当大的Yii1应用程序,我想慢慢迁移到Yii2。我想逐渐这样做。
我已按照Yii2 and Yii1 integration manual中的说明进行操作。
我的应用程序运行正常。
我也尝试了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
我无法使用我习惯的网址方案访问它,因此似乎找不到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!!";
}
}
似乎<controller>/<action>
的默认网址映射无法处理命名空间控制器有没有办法解决这个问题?
答案 0 :(得分:1)
似乎/无法处理命名空间控制器的默认网址映射是否有办法解决这个问题?
要支持命名空间控制器,您需要将CWebModule::$controllerNamespace
用于模块控制器,或CWebApplication::$controllerNamespace
用于全局应用程序控制器。然后,给定范围内的所有控制器都需要命名空间。如果只想在某些控制器中使用namepsaces,则需要使用CWebApplication::$controllerMap
或CWebModule::$controllerMap
并为指定的路由配置控制器类。
然而,在Yii 1.1应用程序中运行Yii 2.0控制器很可能根本不起作用。如果您只想将应用程序的某些部分移动到Yii 2,我建议将其配置并作为单独的应用程序运行,并使用重写规则路由到正确的应用程序。例如,如果您将user
模块移至Yii 2,则可以在.htaccess
中使用此模块:
RewriteEngine on
# Yii 2 rules
RewriteRule ^user index-yii2.php [L]
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# otherwise forward it to index.php
RewriteRule . index.php [L]
在index.php
文件中,您应该在Yii 1.1中引导您的应用程序,在index-yii2.php
中您有Yii 2应用程序。
答案 1 :(得分:0)
集成的主要目标是使用仅在Yii 2中提供的一些功能。想象一下,您仍然有一个正在运行的Yii 1应用程序。但是你添加了一些带有新功能的外部库。
为了能够使用Yii 2中的控制器,您应该与Yii 1核心进行深度集成。
我只能建议将请求拆分为应用程序索引文件,例如在.htaccess中并在Yii 2中创建一些新功能。