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/index.php
yiiwebApplication 实例,加载配置并启动应用UrlManager 解析 URL,匹配路由,定位对应控制器动作(Controller::actionXxx())beforeAction)、动作逻辑、数据模型操作(ActiveRecord/Query)、视图渲染(render())Response)发送 HTML/JSON 数据回客户端理解这个流程,有助于调试性能瓶颈、定制中间件式逻辑(如全局权限检查、请求日志记录),以及正确使用事件(如 Application::EVENT_BEFORE_REQUEST)。
Yii2 提供两层数据库抽象:底层是灵活的 Query Builder(面向 SQL 构建),上层是基于约定的 ActiveRecord(AR)(面向对象建模)。推荐按场景选择:
User::find()->with('profile')->where(['status' => 1])->all()
(new Query())->select(['u.name', 'COUNT(o.id)'])->from('user u')->leftJoin('order o', 'o.user_id = u.id')->groupBy('u.id')->all()
with() 预加载关联,或 joinWith() 一次性 JOIN 查询$transaction = Yii::$app->db->beginTransaction() 包裹,确保原子性Yii2 内置多项安全机制,但需开发者主动启用和规范使用:
where(['id' => $id]) 或 addParams()),基本可杜绝= Html::encode($name) ?> 或 = $this->context->escapeHtml($content) ?>;模板中禁用 = $rawHtml ?>,改用 = Html::decode($rawHtml) ?> 并确保内容可信yiiwebView 自动注入隐藏字段);API 接口需在 Request 组件中关闭:'enableCsrfValidation' => false(仅限无状态接口)authKey、cookieValidationKey)绝不可硬编码在 config/web.php 中,应通过环境变量或独立配置文件加载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"})