T-DOC
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • Laravel-11
  • Laravel-10
  • Laravel-6X
  • Laravel-5.5
Dcat-Admin
  • Yii2
  • 重构2
  • 前言

    • 关于 Yii
    • 从 Yii 1.1 升级
    • Yii 2.0 升级说明
    • 贡献者指引
    • 捐献和赞助
  • 版本管理

    • 发行说明
    • 版本说明
    • 更新记录
  • 快速入门

    • 安装 Yii
    • 目录结构
    • 部署
    • Hello world
    • 使用表单
    • 使用数据库
    • 使用 Gii 生成代码
    • 编辑器与 IDE
  • 核心架构

    • 请求生命周期
    • 单一入口
    • 应用主体
    • 组件
    • 属性
    • 事件
    • 行为
    • 配置
    • 别名
    • 类自动加载
    • 服务定位器
    • 依赖注入容器
  • 高级应用模板

    • 安装
    • 框架结构
    • 运行测试
    • 环境与配置
    • 自定义应用模板
  • 基础功能

    • 路由
    • 控制器
    • 过滤器
    • 请求
    • 响应
    • 模型
    • 视图
    • 模块
    • 小部件
    • 前端资源
    • 扩展
    • Sessions 和 Cookies
    • 错误处理
    • 日志
  • 数据库

    • 数据库访问对象(DAO)
    • 查询构造器
    • 活动记录
    • 数据库迁移
    • Redis
    • Sphinx
    • Elasticsearch
    • MongoDB
  • 安全

    • 认证
    • 授权
    • 加密
    • Email 认证
    • 验证码
    • 社会化登录
    • 密码
  • 进阶功能

    • 缓存
    • 发送邮件
    • HTTP 客户端
    • 国际化
    • 队列
    • 控制台应用
    • 助手类
    • 验证器
  • RESTful Web 服务

    • 快速入门
    • 资源
    • 控制器
    • 路由
    • 格式化响应
    • 认证
    • 速率限制(限流)
    • 版本化
    • 错误处理
  • 开发工具

    • 调试工具栏和调试器
    • 使用 Gii 生成代码

请求生命周期

静态结构

Yii 应用参照 模型-视图-控制器(MVC)设计模式来组织。模型 代表数据、业务逻辑和规则;视图 展示模型的输出;控制器 接受出入并将其转换为模型和视图命令。

除了 MVC, Yii 应用还有以下部分:

  • 入口脚本:终端用户能直接访问的 PHP 脚本, 负责启动一个请求处理周期。
  • 应用:能全局范围内访问的对象, 管理协调组件来完成请求.
  • 应用组件:在应用中注册的对象, 提供不同的功能来完成请求。
  • 模块:包含完整 MVC 结构的独立包, 一个应用可以由多个模块组建。
  • 过滤器:控制器在处理请求之前或之后 需要触发执行的代码。
  • 小部件:可嵌入到视图中的对象, 可包含控制器逻辑,可被不同视图重复调用。

下面的示意图展示了 Yii 应用的静态结构:

Yii应用静态结构

生命周期

每一次 Yii 应用开始处理 HTTP 请求时,它都会进行一个近似的流程。

  1. 用户提交指向 入口脚本 web/index.php 的请求。
  2. 入口脚本会加载 配置数组 并创建一个 应用 实例用于处理该请求。
  3. 应用会通过 request(请求) 应用组件 解析被请求的 路由。
  4. 应用创建一个 controller(控制器) 实例具体处理请求。
  5. 控制器会创建一个 action(动作) 实例并为该动作执行相关的 Filters(访问过滤器)。
  6. 如果任何一个过滤器验证失败,该动作会被取消。
  7. 如果全部的过滤器都通过,该动作就会被执行。
  8. 动作会加载一个数据模型,一般是从数据库中加载。
  9. 动作会渲染一个 View(视图),并为其提供所需的数据模型。
  10. 渲染得到的结果会返回给 response(响应) 应用组件。
  11. 响应组件会把渲染结果发回给用户的浏览器。

下面的示意图展示了应用是如何处理一个请求的。

请求生命周期

在这个版块中,我们会更加详细地描述某些步骤的具体运作。

💖喜欢本文档的,欢迎点赞、收藏、留言或转发,谢谢支持!
作者邮箱:zhuzixian520@126.com,github地址:github.com/zhuzixian520

Last Updated:
Contributors: Hans
Next
单一入口