yii 2.0 是完全重写的框架,核心类、命名规则、配置结构等全面变更,需逐模块重构:controller 必须继承 yii\base\controller,应用实例统一为 yii::$app,布局设置逻辑调整,activeform 替换为 yii\widgets\activeform,ar 查询改为链式静态方法,资源注册改用 assetbundle,php 要求 5.4+。

Yii 2.0 不是 Yii 1.1 的小升级,而是完全重写的框架——所有核心类、命名规则、对象初始化方式、配置结构都变了。直接替换文件或改几个函数名就能跑通的迁移不存在,必须按模块逐层重构。
Controller 类继承和 $app 访问方式必须重写
Yii 1.1 的控制器继承 CController,Yii 2.0 必须继承 yii\base\Controller;否则报错 Class 'CController' not found。应用实例也不再是 Yii::app(),统一改为静态属性 Yii::$app。
-
Yii::app()->request→Yii::$app->request -
Yii::app()->user→Yii::$app->user -
Yii::app()->db→Yii::$app->db - 视图中用到的
Yii::app()->theme->baseUrl要改成Yii::$app->view->theme->baseUrl或$this->theme->baseUrl
布局(layout)设置逻辑变了,不能直接赋值 $layout
Yii 1.1 中在控制器里设 $layout = 'main' 就生效;Yii 2.0 底层靠 findLayoutFile() 动态查找,$this->layout 仍可设,但含义和查找路径已不同。
- 默认仍找
@app/views/layouts/main.php,但路径解析依赖view组件的layoutPath配置 - 若在
config/web.php里全局设'layout' => 'mine',会覆盖控制器级设置 - 个别动作想用独立布局,得在 action 内部设
$this->layout = 'special',且确保special.php在 layout 目录下 - 别在控制器构造函数里设
$this->layout—— 此时view组件还没初始化,会静默失败
ActiveForm 和表单字段写法全量更新
Yii 1.1 的 CActiveForm 在 Yii 2.0 中彻底移除,取而代之的是命名空间下的 yii\widgets\ActiveForm,且字段生成方法签名和返回值都不同。
- 必须加
use yii\widgets\ActiveForm;,否则ActiveForm::begin()找不到类 -
$form->textField($model, 'name')→$form->field($model, 'name')->textInput() - 属性传入方式变:原 array 参数现在是方法链式调用,如
->textInput(['id' => 'user_name', 'class' => 'form-control']) - 密码框、下拉、复选等不再用
passwordField等,统一为passwordInput()、dropDownList()、checkboxList() - 提交按钮推荐用
Html::submitButton(),而非$form->submit()—— 后者在 2.0 中已不存在
模型查询语法和资源管理方式不兼容
AR 查询从 User::model()->find() 彻底转向 ActiveRecord 的静态方法链式调用,同时资源(CSS/JS)注册也从全局函数变为 AssetBundle 优先。
-
User::model()->findByPk(1)→User::findOne(1) -
User::model()->findAll('status=:s', [':s' => 1])→User::find()->where(['status' => 1])->all() - 查询结果默认是对象,要数组加
->asArray(),如User::find()->asArray()->all() - 前端资源不再用
Yii::app()->clientScript->registerCssFile(),改用AppAsset::register($this)或Yii::$app->view->registerJs() - PHP 版本要求升到 5.4+,短标签
=可直接用,无需开short_open_tag
最易被忽略的是命名空间和自动加载机制:Yii 2.0 所有核心类都带命名空间,use 声明不是可选项;而 Composer 自动加载规则与 1.1 的 import 完全不兼容,旧扩展若没重写命名空间和 autoload 配置,基本无法复用。











