Application Workflow
安装 Yii 后,你就有了一个可工作的 Yii 应用程序。本节介绍应用程序的内置功能、代码的组织方式以及应用程序如何处理请求。
请注意,与框架本身不同,安装项目模板后,它就完全属于你了。你可以自由地添加或删除代码,并根据需要进行整体更改。
Functionality
安装的应用程序只包含一个页面,可通过 http://localhost/ 访问。它共享一个通用布局,你可以在其他页面上重用。
In addition to the web application, you can access a console script via ./yii or, in case of Docker, make yii. Use this script to run background and maintenance tasks for the application, which the Console Application Section describes.
Experimental debugger
Yii has a debugger that can collect debug data for web requests and expose it through the Yii Dev Panel. The debugger is a work in progress. It isn't released as a stable package, and its API, routes, and setup may change or be deprecated.
To try the current development version, install the debug API package:
composer require yiisoft/yii-debug-api:^3.0@devEnable debug mode in .env:
APP_DEBUG=trueThe package registers its routes automatically. Start the application and open /debug to check that the debug API is available. Then open Yii Dev Panel and set your application URL there.
CAUTION
Use debug mode for local development. In production, keep APP_DEBUG=false and don't expose debug routes publicly.
应用结构
应用程序中最重要的目录和文件是(假设应用程序的根目录是 app):
assets/ 资源包源文件。
config/ 配置文件。
common/ 通用配置和 DI 定义。
console/ 控制台特定配置。
environments/ 环境特定配置(dev/test/prod)。
web/ Web 特定配置。
docker/ Docker 特定文件。
public/ 可从互联网公开访问的文件。
assets/ 已发布/编译的资源。
index.php 入口脚本。
runtime/ 运行时生成的文件。
src/ 应用程序源代码。
Console/ 控制台命令。
Shared/ Web 和控制台应用程序之间共享的代码。
Web/ Web 特定代码(动作、处理器、布局)。
Shared/ 共享的 Web 组件。
Layout/ 布局组件和模板。
Environment.php 环境配置类。
tests/ 应用程序的 Codeception 测试集。
Console/ 控制台命令测试。
Functional/ 功能测试。
Unit/ 单元测试。
Web/ Web 动作测试。
vendor/ 已安装的 Composer 包。
Makefile make 命令的配置。
yii 控制台应用程序入口点。一般来说,应用程序中的文件分为两组:app/public 下的文件和其他目录下的文件。你可以通过 HTTP(即在浏览器中)直接访问前者,而不应该暴露后者。
每个应用程序都有一个入口脚本 public/index.php,这是应用程序中唯一可通过 Web 访问的 PHP 脚本。入口脚本使用应用程序运行器在 PSR-7 包之一的帮助下创建传入请求的实例,并将其传递给应用程序实例。应用程序按顺序执行一组中间件来处理请求。然后将结果传递给发射器,发射器将响应发送到浏览器。
根据你使用的中间件,应用程序的行为可能会有所不同。默认情况下,路由器使用请求的 URL 和配置来选择处理器并执行它以生成响应。
你可以从 yiisoft/app 包文档中了解更多关于应用程序模板的信息。
Request Lifecycle
下图显示了应用程序如何处理请求。
flowchart LR
user[用户客户端] --> index
index[index.php] --> DI[初始化依赖容器]
config[配置] -.-> DI
DI --> RequestFactory[请求工厂]
RequestFactory -->|请求| app[应用程序]
app -->|请求| middleware[中间件]
middleware -->|请求| router[路由器]
router -->|请求| action[动作处理器]
action -->|响应| emitter[SapiEmitter]
router -->|响应| emitter
middleware -->|响应| emitter
app -->|响应| emitter
emitter --> user