- 后端
- Web框架
【免费下载链接】yii2
Yii 2: The Fast, Secure and Professional PHP Framework
读完本指南,你将掌握 Yii 2 Basic 项目模板安装完成后的全貌:如何通过 URL 访问应用、开箱即用的四个页面与调试工具栏、basic/目录各文件与文件夹的职责划分、MVC 架构的组织方式,以及一个 HTTP 请求从入口脚本到浏览器响应的完整 11 步生命周期。本文以官方"运行应用"(Running Applications)指南为主体,结合本仓库 framework 目录下的真实源码进行印证,帮助你从"能跑起来"进阶到"看懂它怎么跑"。
说明:为便于阅读,本指南假设你将
basic/web设置为 Web 服务器的文档根目录(document root),并将应用访问 URL 配置为https://hostname/index.php或类似形式。实际部署时请按你的服务器配置相应调整。
安装之后:你的应用已经属于你
按照 Yii 安装指南 完成安装后,你立刻拥有一个可工作的 Yii 应用,它可以通过https://hostname/basic/web/index.php访问;如果 Web 服务器配置了文档根目录,则可以直接通过https://hostname/index.php访问。
一个值得强调的理念是:与框架本身不同,项目模板安装完成后就完全属于你了。你可以按需添加、删除代码,自由改造整体结构——模板只是起点,不是约束。
开箱即用的功能
Basic 模板安装后自带四个页面:
| 页面 | URL | 功能说明 |
|---|---|---|
| 首页(Home) | https://hostname/index.php | 默认访问时展示的页面 |
| 关于(About) | — | 展示项目/团队介绍信息的静态页面 |
| 联系(Contact) | — | 内置反馈表单,终端用户可通过邮件联系开发者 |
| 登录(Login) | — | 授权认证表单,用于验证用户身份 |
你可以立即尝试用admin/admin作为用户名/密码登录,登录成功后会发现顶部主菜单中的"Login"项变成了"Logout"——这是模板内置的用户认证逻辑在起作用。
这四个页面共用统一的页头(Header)和页脚(Footer):页头包含主导航菜单栏,方便用户在页面间跳转;页脚则展示版权与通用信息。
底部调试工具栏
在浏览器窗口最底部,你还会看到一条工具栏。这是 Yii 提供的调试器工具(Yii Debug),由 Yii 官方yii2-debug扩展实现,用于记录并展示大量调试信息,例如:
- 日志消息(log messages)
- 响应状态码
- 已执行的数据库查询(SQL)
- 其他运行期调试数据
它由运行在后台的调试模块控制,会在应用执行过程中持续采集信息。这是开发阶段排查问题的利器,生产环境应关闭。
控制台脚本yii
除了 Web 应用,模板还在应用根目录提供了一个名为yii的控制台脚本(即本仓库 framework/yii 对应的模板脚本)。它可以用于执行后台任务和维护任务,例如:
- 运行数据库迁移
- 清理缓存
- 生成代码
其入口逻辑在本仓库源码中清晰可见:脚本加载 Composer 自动加载器与Yii.php后,实例化yii\console\Application并调用run(),最后以进程退出码结束。控制台命令的完整用法参见控制台应用章节。
应用目录结构:basic/逐项解读
以下列出应用中最关键的目录与文件(假设应用根目录为basic):
basic/ 应用根目录(base path) composer.json Composer 使用的文件,描述包信息 config/ 应用及其他配置存放目录 console.php 控制台应用配置 web.php Web 应用配置 commands/ 控制台命令类 controllers/ 控制器类 models/ 模型类 runtime/ Yii 运行期生成的文件,如日志、缓存文件 vendor/ Composer 安装的包,包含 Yii 框架本身 views/ 视图文件 web/ 应用 Web 根目录,存放可通过 Web 访问的文件 assets/ 由 Yii 发布的资源文件(javascript 和 css) index.php 应用的入口(引导)脚本 yii Yii 控制台命令执行脚本两类文件的边界:可公开访问 vs 必须受保护
从整体上看,应用文件可以分成两大类:
basic/web下的文件:可以直接通过 HTTP(即浏览器)访问,属于 Web 根目录的公开资源;- 其他目录下的文件:不能也不应该通过互联网直接访问,因为它们承载的是业务逻辑与敏感配置。
这条边界是 Yii 安全模型的基础:把web/设为文档根目录后,config/、models/、runtime/等目录天然处于 Web 可访问范围之外,即使服务器配置有误也不会直接暴露源码。
MVC 架构:目录即分层
Yii 实现了经典的**模型-视图-控制器(Model-View-Controller, MVC)**架构模式,并直接体现在上述目录组织上:
models/目录存放所有模型类——负责业务数据与规则;views/目录存放所有视图脚本——负责展示逻辑;controllers/目录存放所有控制器类——负责接收请求、调度模型与视图。
下图展示了应用的整体静态结构(来源:本仓库 guide-uz/images/application-structure.png):
在 MVC 体系之上,每个应用都拥有一个入口脚本web/index.php,它是应用中唯一可通过 Web 访问的 PHP 脚本。入口脚本接收传入请求,创建应用实例来处理它;应用借助其组件体系解析请求,并将其分发给 MVC 元素;视图中的小部件(Widgets)则用于构建复杂、动态的用户界面元素。
入口脚本做什么
Web 应用的入口脚本通常按以下顺序工作(详见入口脚本章节):
- 定义全局常量(如
YII_DEBUG、YII_ENV); - 注册 Composer 自动加载器;
- 引入
Yii类文件; - 加载应用配置(
config/web.php); - 创建并配置应用实例;
- 调用
run()处理传入请求。
从源码看,入口脚本创建应用后调用的正是 framework/base/Application.php 中的run()方法:它依次触发EVENT_BEFORE_REQUEST事件、调用抽象方法handleRequest()获取响应、触发EVENT_AFTER_REQUEST事件、调用$response->send()发送响应,最后返回退出状态码。
请求生命周期:一个请求的完整旅程
下图展示了应用处理一次请求的完整流程(来源:本仓库 guide-uz/images/request-lifecycle.png):
一次请求从用户浏览器发出到页面渲染完成,共经历 11 个步骤:
- 用户向入口脚本
web/index.php发起请求; - 入口脚本加载应用配置,并创建应用实例来处理请求;
- 应用借助请求(request)组件解析所请求的路由(route);
- 应用创建控制器(controller)实例来处理请求;
- 控制器创建动作(action)实例,并为动作执行过滤器(filters);
- 若任一过滤器失败,动作被取消,请求就此终止;
- 若所有过滤器通过,动作被执行;
- 动作加载数据模型(可能来自数据库);
- 动作渲染视图,并将数据模型提供给视图;
- 渲染结果返回给响应(response)组件;
- 响应组件将渲染结果发送到用户浏览器。
源码层面的印证
上述生命周期在框架源码中均有明确对应实现,可以逐一对照验证:
- 第 2 步创建应用:入口脚本执行
(new yii\web\Application($config))->run(),对应 framework/web/Application.php 的构造与 framework/base/Application.php 的run(); - 第 3 步解析路由:
run()内部调用handleRequest($this->getRequest()),Web 版实现在 framework/web/Application.php 中,通过$request->resolve()得到($route, $params),并记录Yii::debug("Route requested: '$route'")日志;resolve()的抽象签名定义于 framework/base/Request.php,具体实现在 framework/web/Request.php; - 第 4~7 步创建控制器与动作、执行过滤器:
handleRequest()取得路由后调用runAction($route, $params),该调用链在 framework/base/Controller.php 中继续;若路由无效则抛出InvalidRouteException,并最终转化为NotFoundHttpException(对应 404 "Page not found.")——这就是步骤 6 中"过滤器失败则动作取消"以及路由错误时返回 404 的底层机制; - 第 10~11 步组装并发送响应:
handleRequest()将动作返回值写入$response->data后返回Response对象,run()再调用$response->send()(定义于 framework/base/Response.php)把结果真正输出到用户浏览器。
值得一提的是,run()中设置并切换的应用状态机(STATE_BEFORE_REQUEST→STATE_HANDLING_REQUEST→STATE_AFTER_REQUEST→STATE_SENDING_RESPONSE→STATE_END)正是调试工具栏能够记录每个阶段耗时与事件的基础设施。
小结
至此你已经掌握了 Yii 2 Basic 应用的运行全貌:通过入口脚本启动应用、四个内置页面与调试工具栏的用法、basic/目录的安全边界与 MVC 分层、以及贯穿 11 个步骤的请求生命周期。下一步可以继续阅读控制器、模型、视图与运行时处理等章节,逐步深入 Yii 2 的核心开发能力。
- 后端
- Web框架
【免费下载链接】yii2
Yii 2: The Fast, Secure and Professional PHP Framework
相关推荐
Yii 2 应用运行指南:内置功能、目录结构与请求生命周期全解析
Yii 2 应用运行指南:内置功能、目录结构与请求生命周期全解析 本指南面向已完成 Yii 2 安装 https://link.gitcode.com/i/5b
后端Web框架Yii 2 入门:运行应用、理解目录结构与请求生命周期
Yii 2 入门:运行应用、理解目录结构与请求生命周期 安装 Yii 2 之后,你就拥有了一个可以立即运行的基本 Web 应用。本文以 Yii 2 官方入门指南
后端Web框架Yii 2 应用运行全解析:内置功能、目录结构与请求生命周期(Getting Started: Running Applications)
Yii 2 应用运行全解析:内置功能、目录结构与请求生命周期(Getting Started: Running Applications) 本文基于 Yii 2
后端Web框架
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考