简介
默认的 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
命令创建。用于存放自定义的验证规则类,将复杂验证逻辑封装为独立对象。详见 验证文档。