简介
默认的 Hypervel 应用结构与 Laravel 一致。它可以为构建大型或小型应用提供良好的起点。你可以根据自己的喜好组织应用结构,但由于 Hypervel 的核心设计,一些目录如 bootstrap、config、database 和 runtime 是必须保留的。
你的目录结构如下:
├── app│ ├── Console│ │ └── Commands│ ├── Events│ ├── Exceptions│ ├── Http│ │ ├── Controllers│ │ ├── Middleware│ │ └── Requests│ ├── Jobs│ ├── Listeners│ ├── Models│ └── Providers├── bootstrap├── config├── database│ ├── factories│ ├── migrations│ └── seeders├── lang│ ├── en│ ├── zh_CN│ └── zh_TW├── public├── resources├── routes├── runtime│ └── container├── storage│ ├── app│ ├── framework│ └── logs└── tests├── Feature└── Unit
根目录说明
app 目录
app 目录包含你应用的核心代码。我们稍后会深入介绍它,但几乎你所有的类都会放在这个目录下。
bootstrap 目录
bootstrap 目录包含 app.php 文件,它用于引导整个框架的启动。
runtime 目录
此目录用于存储 Hypervel 在运行期间生成的文件。它包含一个 container 子目录,用于缓存扫描结果等框架生成的文件。
config 目录
顾名思义,config 目录包含你所有的配置文件。建议你仔细阅读这些文件,熟悉可配置的选项。
⚠️ 注意
在 Hyperf 中,config 目录下还有一个 autoload 子目录。但在 Hypervel 中,这个目录被移除了,所有配置文件被平铺,和 Laravel 一样。
hyperf.php 文件保留是为了兼容 Hyperf 的顶层配置文件,这里的配置不会有任何前缀。而 config/config.php 中的配置被迁移到了 config/app.php。
database 目录
此目录包含数据库迁移(migrations)、模型工厂(factories)和种子文件(seeders)。你也可以在这里放置 SQLite 数据库文件。
public 目录
public 目录用于存放静态资源,如图片、JavaScript 和 CSS 文件。
resources 目录
resources 目录包含视图(views)以及原始未编译的资源文件,如 CSS 或 JavaScript。
lang 目录
lang 目录包含翻译文件。每种支持的语言都有一个子目录。Hypervel 使用这种方式来管理内置功能(如验证错误信息)的语言翻译。
routes 目录
routes 目录包含应用的所有路由定义。默认包含三个路由文件:web.php、api.php 和 console.php。
web.php:包含用于视图和文件等普通请求的路由。api.php:包含无状态 API 路由,通常用于认证后的接口请求,这些路由不会访问会话状态。console.php:用于定义基于闭包的控制台命令(非 HTTP 路由),也可以在这里 安排任务。
ℹ️ 提示
web.php 和 api.php 应用了 Middleware 分组,但默认是空的。你可以按需自行配置。
storage 目录
此目录包含日志、编译后的 Blade 模板、缓存等框架生成的文件。分为三个子目录:
app:用于存放应用生成的文件。framework:用于存放框架缓存和未来生成的文件。logs:存放应用日志。
你还可以将用户上传的文件(如头像)存放在 storage/app/public 目录下,并通过 public/storage 建立符号链接使其可公开访问。
tests 目录
tests 目录包含自动化测试。框架默认提供了 PHPUnit 的单元测试和功能测试模板。每个测试类建议以 Test 结尾。你可以通过 /vendor/bin/phpunit 命令运行测试。
⚠️ 注意 目前暂不支持 Pest 测试框架。
app 目录详解
你的大部分应用代码都位于 app 目录下。默认命名空间为 App,并通过 Composer 使用 PSR-4 autoloading 标准 自动加载。
app 目录包含多个子目录,如 Console、Http 和 Providers。可以把 Console 和 Http 视为你应用的外部 API 接口(HTTP 和 CLI 都是访问方式,不包含核心业务逻辑)。
你可以通过命令行生成这些目录中的类,例如运行 php artisan list make 查看所有可用的 make 命令。
Console 目录
Console 目录包含你自定义的 Artisan 命令。这些命令可以通过 make:command 命令生成。该目录还包含 console 核心类 kernel,用于注册自定义命令和定义 计划任务。
Events 目录
Events 目录用于存放 事件类。事件可以在特定动作发生时通知应用的其他部分,实现松耦合和高灵活性。
Exceptions 目录
Exceptions 目录包含异常处理器 Handler 类,也是放置你自定义异常类的好地方。你可以通过修改 Handler 来自定义异常的记录和渲染方式。
Http 目录
Http 目录包含控制器(Controllers)、中间件(Middleware)和请求验证类(Requests)。几乎所有处理 HTTP 请求的逻辑都会写在这里。
Jobs 目录
此目录默认不存在,但你可以通过执行 make:job 命令自动创建。用于存放 可排队的任务,任务可以异步执行,也可以同步执行。
Listeners 目录
Listeners 目录包含事件监听器类。监听器接收事件实例,并根据事件执行相应逻辑,例如 UserRegistered 事件可由 SendWelcomeEmail 监听器处理。
Mail 目录
此目录默认不存在,可通过 make:mail 命令创建。用于存放所有 邮件类,每个类封装一封邮件的构建逻辑,并可通过 Mail::send 发送。
Models 目录
Models 目录包含所有的 Eloquent 模型类。Hypervel 自带的 Eloquent ORM 提供优雅简洁的 ActiveRecord 实现,用于操作数据库。每个数据库表对应一个模型类,可用于查询或插入数据。
Notifications 目录
此目录默认不存在,可通过 make:notification 命令创建。用于存放应用中的事务性 通知类,如通过邮件、Slack、SMS 或数据库发送的系统消息。
Policies 目录
此目录默认不存在,可通过 make:policy 命令创建。用于存放应用的 授权策略类,判断用户是否有权限执行某项操作。
Providers 目录
此目录包含应用的所有 服务提供者。服务提供者负责启动应用、注册服务、绑定容器、监听事件等。
Hypervel 默认会预置几个服务提供者,你也可以根据需要添加自定义的 provider。
Rules 目录
此目录默认不存在,可通过 make:rule 命令创建。用于存放自定义的验证规则类,将复杂验证逻辑封装为独立对象。详见 验证文档。
