Yii 2 入门:运行你的第一个应用——内置功能、目录结构与请求生命周期全解析
2026/9/24 0:54:45 网站建设 项目流程
  • 后端
  • Web框架

【免费下载链接】yii2

Yii 2: The Fast, Secure and Professional PHP Framework

项目地址:https://gitcode.com/gh_mirrors/yi/yii2
点击查看免费下载

读完本指南,你将掌握 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 必须受保护

从整体上看,应用文件可以分成两大类:

  1. basic/web下的文件:可以直接通过 HTTP(即浏览器)访问,属于 Web 根目录的公开资源;
  2. 其他目录下的文件不能也不应该通过互联网直接访问,因为它们承载的是业务逻辑与敏感配置。

这条边界是 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 应用的入口脚本通常按以下顺序工作(详见入口脚本章节):

  1. 定义全局常量(如YII_DEBUGYII_ENV);
  2. 注册 Composer 自动加载器;
  3. 引入Yii类文件;
  4. 加载应用配置(config/web.php);
  5. 创建并配置应用实例;
  6. 调用run()处理传入请求。

从源码看,入口脚本创建应用后调用的正是 framework/base/Application.php 中的run()方法:它依次触发EVENT_BEFORE_REQUEST事件、调用抽象方法handleRequest()获取响应、触发EVENT_AFTER_REQUEST事件、调用$response->send()发送响应,最后返回退出状态码。

请求生命周期:一个请求的完整旅程

下图展示了应用处理一次请求的完整流程(来源:本仓库 guide-uz/images/request-lifecycle.png):

一次请求从用户浏览器发出到页面渲染完成,共经历 11 个步骤:

  1. 用户向入口脚本web/index.php发起请求;
  2. 入口脚本加载应用配置,并创建应用实例来处理请求;
  3. 应用借助请求(request)组件解析所请求的路由(route);
  4. 应用创建控制器(controller)实例来处理请求;
  5. 控制器创建动作(action)实例,并为动作执行过滤器(filters);
  6. 若任一过滤器失败,动作被取消,请求就此终止;
  7. 若所有过滤器通过,动作被执行;
  8. 动作加载数据模型(可能来自数据库);
  9. 动作渲染视图,并将数据模型提供给视图;
  10. 渲染结果返回给响应(response)组件;
  11. 响应组件将渲染结果发送到用户浏览器。

源码层面的印证

上述生命周期在框架源码中均有明确对应实现,可以逐一对照验证:

  • 第 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_REQUESTSTATE_HANDLING_REQUESTSTATE_AFTER_REQUESTSTATE_SENDING_RESPONSESTATE_END)正是调试工具栏能够记录每个阶段耗时与事件的基础设施。

小结

至此你已经掌握了 Yii 2 Basic 应用的运行全貌:通过入口脚本启动应用、四个内置页面与调试工具栏的用法、basic/目录的安全边界与 MVC 分层、以及贯穿 11 个步骤的请求生命周期。下一步可以继续阅读控制器、模型、视图与运行时处理等章节,逐步深入 Yii 2 的核心开发能力。

  • 后端
  • Web框架

【免费下载链接】yii2

Yii 2: The Fast, Secure and Professional PHP Framework

项目地址:https://gitcode.com/gh_mirrors/yi/yii2
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询