SuperAPI AI 工具集

php-laravel

编程与开发

查看项目

更新于 10-15 16:18

技能介绍

PHP & Laravel Development

该技能限定于框架级 PHP。若涉及 php-src 内部实现或原生 PHP 扩展(属于 C 语言范畴),则由 ia-c-systems 技能覆盖,包括 Zend API 约定(gen_stub arginfo、请求作用域分配器、自定义对象处理器、.phpt)。

工作规则

保持简单 CRUD 的简单性;仅当跨模型编排有具体用途时才提取。

在请求边界进行验证与授权;通过显式资源序列化,并验证第三方响应。

保留已部署的迁移历史、队列负载兼容性与并发写入。

当缓存编译、队列执行与 HTTP 行为路径发生变化时,通过其真实入口点进行验证。

代码风格

每个文件使用 declare(strict_types=1)。

正常路径放在最后:守卫与错误在前,成功在末尾。提前返回,不用 else。

注释解释为什么,绝不解释是什么。绝不为测试写注释。若代码需要“是什么”的注释,则重命名或重构。

不使用单字母变量:用 $exception 而非 $e,用 $request 而非 $r。

使用 ?string 而非 string|null。始终指定 void。导入类名,绝不内联 FQN。

将一个参数放宽为 ?T 时,必须审计所有转发同一值的调用点:同级调用仍声明 string,即使没有 declare(strict_types=1),null 也会在那里抛出 TypeError,因为强制模式从不将 null 强制转换为标量。严格性由调用所在文件决定,而非被调用方文件。完整机制见 common-pitfalls.md。

验证使用数组表示法 ['required', 'email'],便于自定义规则类。

PHPStan 级别 8+(phpstan analyse --level=8);新项目目标为 9。使用 @phpstan-type / @phpstan-param 表示泛型集合类型。missing-iterable-value-type 检查在级别 6(及所有更高级别)生效,因此任何 8+ 项目都会继承它:对每个可迭代对象使用泛型形式(@return Collection<int, User>、@param array<int, MyObject>),固定键返回使用数组形状表示法 array{first: SomeClass, second: SomeClass};裸 Collection 或 array 无法通过该检查。

纪律

简单优先:每个变更尽可能简单,代码影响最小。

只触碰必要部分;不做无关变更。

不做取巧的变通:若修复感觉不对,退一步实现干净的方案。

新抽象需要 3 个以上使用点;否则内联。

不允许空 catch 块:记录或重新抛出,绝不吞掉。

声明完成前先验证:./vendor/bin/phpstan analyse --level=8 && ./vendor/bin/phpunit,零警告。

按阶段设置检查点,而非仅在最后:迁移后运行 migrate:status,路由变更后运行 route:list --path=<prefix>,添加任务后运行 queue:work --once,PR 前运行 pint --test。每个检查点都能在变更尚小时捕获其失败类别。

参考文档

laravel-ecosystem.md:通知、任务调度、自定义 Casts

testing.md:PHPUnit 基础、数据提供器、运行测试

feature-testing.md:认证、验证、API、控制台、数据库断言

mocking-and-faking.md:Facade 伪造、动作模拟、Mockery

factories.md:状态、关系、序列、afterCreating 钩子

production-performance.md:OPcache、JIT、预加载、部署缓存

common-pitfalls.md:事件层绕过、外键级联、中间表写入、资源与请求形状陷阱

pitfalls-deep.md:afterCommit 替代方案、观察者失步、jsonb 竞态、保存点、验证规则内部机制

任务特定参考

在实现或审查匹配行为前,阅读相关参考:

PHP 特性、控制器/动作设计、路由、资源或外部 API:framework-patterns.md。

迁移、Eloquent 写入、casts、队列、任务负载或生产启动:persistence-and-jobs.md。

PHPUnit 工作或影响事件、序列化、验证或生命周期行为的变更:testing-and-pitfalls.md。

现有专门参考(当对应主题适用时):