最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Yii2 完整知识总结与使用教程 :必看
时间:2026-07-11 09:18:52 编辑:袖梨 来源:一聚教程网
Yii2 是高性能PHP框架,采用组件化MVC架构,请求流程含入口加载、路由匹配、控制器执行与响应返回;数据库支持ActiveRecord与Query Builder双层抽象;内置SQL注入、XSS、CSRF等安全机制;RESTful开发依托ActiveController与序列化配置。
Yii2 是一个高性能、安全、可扩展的 PHP 框架,适合中大型 Web 应用开发。它强调“约定优于配置”和“DRY(Don’t Repeat Yourself)”,同时提供丰富的内置功能(如 RBAC、缓存、表单验证、RESTful 支持等),但学习曲线略高于 Laravel 或 ThinkPHP。掌握 Yii2 的关键,在于理解其核心架构(MVC + 组件化)、生命周期、路由机制和 ActiveRecord 设计思想。
核心架构与请求生命周期
Yii2 采用清晰的组件化 MVC 架构:所有功能(日志、缓存、数据库、用户认证等)都以 Application Component(应用组件) 形式注册并按需加载。一次 HTTP 请求的典型流程为:
- Web 服务器(如 Nginx/Apache)将请求转发给
web/index.php - 入口文件创建
yiiwebApplication实例,加载配置并启动应用 - 应用通过
UrlManager解析 URL,匹配路由,定位对应控制器动作(Controller::actionXxx()) - 执行前置过滤(
beforeAction)、动作逻辑、数据模型操作(ActiveRecord/Query)、视图渲染(render()) - 响应对象(
Response)发送 HTML/JSON 数据回客户端
理解这个流程,有助于调试性能瓶颈、定制中间件式逻辑(如全局权限检查、请求日志记录),以及正确使用事件(如 Application::EVENT_BEFORE_REQUEST)。
数据库操作:ActiveRecord 与 Query Builder
Yii2 提供两层数据库抽象:底层是灵活的 Query Builder(面向 SQL 构建),上层是基于约定的 ActiveRecord(AR)(面向对象建模)。推荐按场景选择:
- 简单 CRUD、关联查询、快速原型 → 优先用 ActiveRecord:
User::find()->with('profile')->where(['status' => 1])->all() - 复杂 JOIN、子查询、UNION、原生函数(如 GROUP_CONCAT)→ 切换到 Query Builder:
(new Query())->select(['u.name', 'COUNT(o.id)'])->from('user u')->leftJoin('order o', 'o.user_id = u.id')->groupBy('u.id')->all() - 避免 N+1 查询:使用
with()预加载关联,或joinWith()一次性 JOIN 查询 - 事务操作统一用
$transaction = Yii::$app->db->beginTransaction()包裹,确保原子性
安全实践与常见防护措施
Yii2 内置多项安全机制,但需开发者主动启用和规范使用:
-
SQL 注入:只要坚持使用参数化查询(AR 方法、Query Builder 的
where(['id' => $id])或addParams()),基本可杜绝 -
XSS:视图中输出变量默认不自动转义;必须手动使用
= Html::encode($name) ?>或= $this->context->escapeHtml($content) ?>;模板中禁用= $rawHtml ?>,改用= Html::decode($rawHtml) ?>并确保内容可信 -
CSRF:表单提交默认开启 CSRF 验证(
yiiwebView自动注入隐藏字段);API 接口需在Request组件中关闭:'enableCsrfValidation' => false(仅限无状态接口) -
敏感配置:数据库密码、密钥(
authKey、cookieValidationKey)绝不可硬编码在config/web.php中,应通过环境变量或独立配置文件加载
RESTful API 开发要点
Yii2 提供完整 REST 支持,适合构建前后端分离项目:
- 继承
yiirestActiveController,设置$modelClass即可获得标准 CRUD 接口(GET /users, POST /users 等) - 自定义响应格式:在
config/web.php中配置response.formats,支持 JSON、XML、CSV 输出 - 权限控制用
behaviors()->access结合 RBAC 或自定义规则,例如限制仅登录用户访问:'only' => ['index', 'view'], 'roles' => ['@'] - 序列化行为(
Serializer)可定制字段映射、嵌套关系、时间格式(如'datetimeFormat' => 'php:Y-m-d H:i:s') - 错误统一处理:重写
yiirestController::onError()或配置errorHandler组件,返回结构化错误码(如{"code": 404, "message": "User not found"})