简介

默认的 Hypervel 应用结构与 Laravel 一致。它可以为构建大型或小型应用提供良好的起点。你可以根据自己的喜好组织应用结构,但由于 Hypervel 的核心设计,一些目录如 bootstrapconfigdatabaseruntime 是必须保留的。

你的目录结构如下:

  1. ├── app
  2. ├── Console
  3. └── Commands
  4. ├── Events
  5. ├── Exceptions
  6. ├── Http
  7. ├── Controllers
  8. ├── Middleware
  9. └── Requests
  10. ├── Jobs
  11. ├── Listeners
  12. ├── Models
  13. └── Providers
  14. ├── bootstrap
  15. ├── config
  16. ├── database
  17. ├── factories
  18. ├── migrations
  19. └── seeders
  20. ├── lang
  21. ├── en
  22. ├── zh_CN
  23. └── zh_TW
  24. ├── public
  25. ├── resources
  26. ├── routes
  27. ├── runtime
  28. └── container
  29. ├── storage
  30. ├── app
  31. ├── framework
  32. └── logs
  33. └── tests
  34. ├── Feature
  35. └── 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.phpapi.phpconsole.php

  • web.php:包含用于视图和文件等普通请求的路由。
  • api.php:包含无状态 API 路由,通常用于认证后的接口请求,这些路由不会访问会话状态。
  • console.php:用于定义基于闭包的控制台命令(非 HTTP 路由),也可以在这里 安排任务

ℹ️ 提示 web.phpapi.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 命令创建。用于存放自定义的验证规则类,将复杂验证逻辑封装为独立对象。详见 验证文档