Yii2目录结构与请求生命周期是新手理解框架的关键;目录有严格职责划分,请求经入口→路由→控制器→视图→响应五步链执行。

安装 Yii2 后,目录结构不是随意组织的,而是框架运行的“骨架”;应用生命周期也不是黑箱流程,而是有明确阶段、可观察、可调试的执行链。理解这两点,是新手不被绕晕的关键。
核心目录结构:每个文件夹都有明确职责
用 composer create-project --prefer-dist yiisoft/yii2-app-basic basic 创建项目后,你会看到如下关键目录:
- web/:唯一公开入口,所有 HTTP 请求必须指向此目录下的 index.php。切勿将整个项目根目录暴露给 Web 服务器。
- config/:存放配置文件。重点关注 web.php(Web 应用主配置) 和 db.php(数据库连接),修改前务必确认语法和路径正确。
- controllers/:控制器类所在目录。类名必须与文件名一致(如 SiteController.php → class SiteController),且开头必须声明命名空间 namespace app\controllers;
- views/:视图模板存放处。路径严格对应控制器——SiteController 的 actionAbout() 对应 views/site/about.php,大小写敏感(Linux 环境下尤其重要)。
- models/:数据模型类。使用 gii 生成后,检查命名空间是否为 app\models,文件路径是否为 models/User.php(不能是 Models/User.php 或 models/user.php)。
- runtime/ 和 assets/:框架自动生成的缓存、日志、发布资源目录,Web 服务器用户需有写权限,否则报错或页面空白。
请求生命周期:从 URL 到浏览器响应的五步链
每次访问 http://localhost/basic/web/index.php?r=site/about,Yii2 都会完整走完以下流程:
- 入口执行:web/index.php 加载配置,创建
yii\web\Application实例。 - 路由解析:根据
r=site/about提取 route,匹配控制器命名空间(app\controllers)和类名(SiteController),再找方法(actionAbout)。 - 控制器加载:自动实例化 SiteController,并调用其
actionAbout()方法。 - 视图渲染:
return $this->render('about')会去views/site/about.php加载模板,注入数据后生成 HTML 内容。 - 响应输出:内容交由
response组件组装 HTTP 头与正文,最终 flush 到浏览器。
新手避坑三要点
-
别关调试模式:在
web/index.php顶部确保defined('YII_DEBUG') or define('YII_DEBUG', true);,否则错误堆栈被吞,只剩白屏。 - 别手动建目录或改大小写:Windows 下可能不报错,但部署到 Linux 就 500;gii 生成的代码要原样保留路径和命名规范。
-
别跳过数据库验证:配置好
config/db.php后,先用命令行php yii migrate/create init测试连通性,再跑 gii,避免生成空模型或 Unknown Property 错误。











