docs(zh-CN): update

This commit is contained in:
neo
2026-03-13 17:45:44 +08:00
parent f548ca3e19
commit 4c0107a322
88 changed files with 16872 additions and 280 deletions

View File

@@ -0,0 +1,36 @@
---
paths:
- "**/*.php"
- "**/composer.json"
---
# PHP 编码风格
> 此文件在 [common/coding-style.md](../common/coding-style.md) 的基础上扩展了 PHP 相关内容。
## 标准
* 遵循 **PSR-12** 的格式化和命名约定。
* 在应用程序代码中优先使用 `declare(strict_types=1);`
* 在所有新代码允许的地方使用标量类型提示、返回类型和类型化属性。
## 不可变性
* 对于跨越服务边界的数据,优先使用不可变的 DTO 和值对象。
* 在可能的情况下,对请求/响应负载使用 `readonly` 属性或不可变构造函数。
* 对于简单的映射使用数组;将业务关键的结构提升为显式类。
## 格式化
* 使用 **PHP-CS-Fixer****Laravel Pint** 进行格式化。
* 使用 **PHPStan****Psalm** 进行静态分析。
* 将 Composer 脚本纳入版本控制,以便在本地和 CI 中运行相同的命令。
## 错误处理
* 对于异常状态抛出异常;避免在新代码中返回 `false`/`null` 作为隐藏的错误通道。
* 在框架/请求输入到达领域逻辑之前,将其转换为经过验证的 DTO。
## 参考
有关更广泛的服务/仓库分层指导,请参阅技能:`backend-patterns`

View File

@@ -0,0 +1,25 @@
---
paths:
- "**/*.php"
- "**/composer.json"
- "**/phpstan.neon"
- "**/phpstan.neon.dist"
- "**/psalm.xml"
---
# PHP 钩子
> 此文件在 [common/hooks.md](../common/hooks.md) 的基础上扩展了 PHP 相关的内容。
## PostToolUse 钩子
`~/.claude/settings.json` 中配置:
* **Pint / PHP-CS-Fixer**:自动格式化编辑过的 `.php` 文件。
* **PHPStan / Psalm**:在类型化代码库中对编辑过的 PHP 文件运行静态分析。
* **PHPUnit / Pest**:当编辑影响到行为时,为被修改的文件或模块运行针对性测试。
## 警告
* 当编辑过的文件中存在 `var_dump``dd``dump``die()` 时发出警告。
* 当编辑的 PHP 文件添加了原始 SQL 或禁用了 CSRF/会话保护时发出警告。

View File

@@ -0,0 +1,33 @@
---
paths:
- "**/*.php"
- "**/composer.json"
---
# PHP 设计模式
> 本文档在 [common/patterns.md](../common/patterns.md) 的基础上,补充了 PHP 相关的内容。
## 精炼控制器,明确服务
* 保持控制器专注于传输层:认证、验证、序列化、状态码。
* 将业务规则移至应用/领域服务中,这些服务无需 HTTP 引导即可轻松测试。
## DTO 与值对象
* 对于请求、命令和外部 API 负载,用 DTO 替代结构复杂的关联数组。
* 对于货币、标识符、日期范围和其他受约束的概念,使用值对象。
## 依赖注入
* 依赖于接口或精简的服务契约,而非框架全局变量。
* 通过构造函数传递协作者,这样服务就无需依赖服务定位器查找,易于测试。
## 边界
* 当模型层职责超出持久化时,应将 ORM 模型与领域决策隔离。
* 将第三方 SDK 封装在小型的适配器之后,使代码库的其余部分依赖于你的契约,而非它们的。
## 参考
关于端点约定和响应格式的指导,请参见技能:`api-design`

View File

@@ -0,0 +1,34 @@
---
paths:
- "**/*.php"
- "**/composer.lock"
- "**/composer.json"
---
# PHP 安全
> 本文档在 [common/security.md](../common/security.md) 的基础上,补充了 PHP 相关的内容。
## 输入与输出
* 在框架边界验证请求输入(`FormRequest`、Symfony Validator 或显式 DTO 验证)。
* 默认在模板中转义输出;将原始 HTML 渲染视为需要合理解释的例外情况。
* 未经验证切勿信任查询参数、Cookie、请求头或上传文件的元数据。
## 数据库安全
* 对所有动态查询使用预处理语句(`PDO`、Doctrine、Eloquent 查询构建器)。
* 避免在控制器/视图中拼接 SQL 字符串。
* 谨慎限定 ORM 批量赋值范围,并明确列出可写入字段的白名单。
## 密钥与依赖项
* 从环境变量或密钥管理器中加载密钥,切勿从已提交的配置文件中读取。
* 在 CI 中运行 `composer audit`,并在添加依赖项前审查新包维护者的可信度。
* 审慎锁定主版本号,并及时移除已废弃的包。
## 认证与会话安全
* 使用 `password_hash()` / `password_verify()` 存储密码。
* 在身份验证和权限变更后重新生成会话标识符。
* 对状态变更的 Web 请求强制实施 CSRF 保护。

View File

@@ -0,0 +1,35 @@
---
paths:
- "**/*.php"
- "**/phpunit.xml"
- "**/phpunit.xml.dist"
- "**/composer.json"
---
# PHP 测试
> 本文档在 [common/testing.md](../common/testing.md) 的基础上,补充了 PHP 相关的内容。
## 测试框架
默认使用 **PHPUnit** 作为测试框架。如果项目已在使用 **Pest**,也是可以接受的。
## 覆盖率
```bash
vendor/bin/phpunit --coverage-text
# or
vendor/bin/pest --coverage
```
在 CI 中优先使用 **pcov****Xdebug**,并将覆盖率阈值设置在 CI 中,而不是作为团队内部的隐性知识。
## 测试组织
* 将快速的单元测试与涉及框架/数据库的集成测试分开。
* 使用工厂/构建器来生成测试数据,而不是手动编写大量的数组。
* 保持 HTTP/控制器测试专注于传输和验证;将业务规则移到服务层级的测试中。
## 参考
关于整个仓库范围内的 RED -> GREEN -> REFACTOR 循环,请参见技能:`tdd-workflow`