Yii框架 2.0和1.1区别_Yii框架版本迁移注意事项【详解】

胖涛君_2464

胖涛君_2464

2026-04-21

458人浏览

原创

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

yii框架 2.0和1.1区别_yii框架版本迁移注意事项【详解】

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 仍可设,但含义和查找路径已不同。

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载
  • 默认仍找 @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 配置,基本无法复用。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

yii yii框架

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

3030

22

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

80

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

40

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

40

10

Revel框架模板渲染与表单验证
Revel框架模板渲染与表单验证

本专题围绕Revel框架视图层开发,介绍模板语法、变量输出、布局复用、表单提交、参数绑定与验证规则,帮助开发者完成安全规范的页面交互。

2026.10.16

20

15

Revel框架MVC路由与控制器
Revel框架MVC路由与控制器

本专题聚焦Revel框架MVC核心机制,讲解路由定义、控制器Action、参数绑定、请求响应和反向路由,并结合常见场景梳理接口请求处理流程。

2026.10.16

20

15

Revel框架入门与安装配置
Revel框架入门与安装配置

本专题从Revel框架环境搭建讲起,系统介绍命令行工具安装、项目创建、目录结构、配置文件及热代码重载,帮助开发者快速完成首个Go Web应用。

2026.10.16

20

15

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

40

20

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

2026.10.15

40

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.3万人学习