Yii 2.0 是彻底重写的框架,非 Yii 1.1 小版本升级;需按模块重构控制器、视图等,核心类改用命名空间(如 yii\base\Controller),PHP 版本要求 5.4+,应用对象统一为 Yii::$app,视图与表单逻辑重设计,资源管理交由 AssetBundle,依赖注入成为核心机制。

Yii 2.0 不是 Yii 1.1 的小版本迭代,而是彻底重写的框架。直接替换文件、改几个类名就想跑通,基本会失败。升级不是“改语法”,而是按模块重构——从控制器、视图、表单到资源管理,逻辑和调用方式都变了。
核心类与命名规则全面重构
Yii 1.1 所有核心类带 C 前缀(如 CController、CActiveForm),靠前缀防冲突;Yii 2.0 全面启用 PHP 命名空间,前缀全部取消,类路径即命名空间路径(如 yii\base\Controller 对应 base/Controller.php)。这意味着:
- 必须添加
use语句引入类,否则报Class not found -
CController→ 必须改为yii\base\Controller,且控制器必须继承它 -
CModel、CActiveRecord等全部废弃,对应替换为yii\base\Model和yii\db\ActiveRecord - PHP 版本要求升至 5.4+,才能支持命名空间、短数组语法、Trait 等特性
应用实例与组件访问方式变更
全局应用对象不再通过方法获取,而是统一为静态属性 Yii::$app。所有原 Yii::app()->xxx 调用都要重写:
-
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
注意:控制器构造函数里访问 $this->layout 或 $this->view 会静默失败——此时视图组件尚未初始化。
视图与表单逻辑重设计
Yii 2.0 引入独立的 View 类,布局(layout)查找机制、主题路径解析、资源注册全由 view 组件统一管理:
- 布局设置仍可用
$this->layout = 'main',但实际路径依赖view组件的layoutPath配置(默认为@app/views/layouts) - 全局 layout 配置(如 config/web.php 中设
'layout' => 'mine')会覆盖控制器级设置 -
CActiveForm彻底移除,必须改用yii\widgets\ActiveForm - 字段生成不再是
$form->textField($model, 'name'),而是链式写法:$form->field($model, 'name')->textInput(['class' => 'form-control']) - 提交按钮改用
Html::submitButton(),$form->submit()已不存在
资源管理与依赖注入新范式
客户端脚本和样式不再靠 getClientScript() 注册,全部交由 AssetBundle 管理:
-
Yii::app()->getClientScript()->registerCssFile()→ 改为定义AppAsset类并调用AppAsset::register($this) - 动态 JS 注册用
$this->registerJsFile()或Yii::$app->view->registerJsFile() - 依赖注入容器(DI Container)成为核心机制,对象创建推荐用
Yii::$container->get()替代new - 服务定位器(Service Locator)统一管理应用组件,
Yii::$app本身就是一个服务定位器实例











