SuperAPI AI 工具集

ia-php-laravel

测试与质量

查看项目

更新于 10-15 22:17

技能介绍

用途:作为面向 Laravel 与 PHP 8.4 的开发规范参考,在编写涉及 Laravel、Eloquent、Blade、artisan 的代码时提供风格约定、架构分层建议、常见陷阱与测试纪律。

主要能力: 一、代码风格。要求每个文件 declare(strict_types=1);成功路径置后,先做守卫与错误处理,早返回不用 else;注释只解释“为什么”;禁止单字母变量;用 ?string 而非 string|null;显式声明 void;类名需 import 而非内联 FQN;验证使用数组式 ['required','email'];PHPStan 级别 8 起,新项目目标 9。 二、现代 PHP 8.4 特性。只读类与属性、构造器提升、带方法与接口的枚举、match 表达式、一等可调用语法、Fibers、DNF 类型、属性钩子、非对称可见性、链式 new 省略括号、array_find/array_any/array_all 等。 三、Laravel 架构。按需升级结构,简单 CRUD 用胖模型加 Form Request 即可;跨模型边界或出现第三个调用方再引入 Action 类。控制器保持薄;业务逻辑放服务类并只读注入;所有验证走 Form Request 并提供 toDto();副作用走事件与监听器,事件用过去式业务命名且载荷携带 ID 与变更事实而非完整模型;约 20 个模型后可改为按功能分目录。 四、生产可靠性。在 service provider 的 boot() 中快速失败式校验配置;提供 /health 浅检查与 /ready 深检查端点。 五、路由与迁移。使用 scopeBindings 防止跨租户访问;路由模型绑定与 apiResource;迁移采用匿名类、蛇形复数表名;外键 constrained 加级联删除并建索引;分离结构与数据迁移;重命名/删除用 expand-contract;已在上线环境执行的迁移不可修改;注意 public $withinTransaction = false 用于逐行提交或 Postgres 不接受事务的语句;migrate:fresh 只重置 SQL 连接,外部存储需幂等。 六、Eloquent。开发环境启用 preventLazyLoading 捕捉 N+1;只选所需列;批量操作在数据库层完成;常用组合建复合索引;大数据集用 chunk(1000) 或 lazy collections;使用查询作用域、withCount/withExists、when() 条件构建、DB::transaction、upsert、Prunable;禁止 $guarded = [],始终显式 $fillable。 七、API 设计。契约先行,先定 Resource 与 Form Request;控制器不得返回原始模型或 toArray();只新增不修改,先弃用后移除;统一响应信封;第三方 SDK 用适配器隔离,捕获厂商异常并转抛领域异常,绝不返回原始厂商对象;第三方响应视为不可信数据,经 DTO 校验后使用。 八、队列。支持 Bus::batch 与 Bus::chain、Redis 限流、ShouldBeUnique、必须实现 failed()。 九、测试(PHPUnit)。Feature 测试覆盖 HTTP 全栈,Unit 测试隔离服务、Action 与值对象;使用 RefreshDatabase 或 DatabaseTransactions;工厂生成数据而非手写插入;一个测试一个行为,test_ 前缀命名;同时断言状态码与副作用;Fake 门面须在动作之前;覆盖率目标 80% 以上。 十、常见陷阱。查询构造器 update() 会跳过观察者与审计事件;观察者 deleting() 在父级作用域清理可能误删兄弟数据;chunkById 配合 json 解码/编码再更新会丢失并发写入;date 转换格式不影响 JsonResource::resolve();嵌套数组验证需配合 'items.*' => 'array';DB::afterCommit 只防回滚不重试;观察者写入导致调用方内存副本过期;BelongsToMany 的 attach/detach/sync 不触发 pivot 事件;Carbon::parse('2020') 会解析为当天 20:20。

使用方式:作为技能载入后,在编写或审查 Laravel 代码时依据上述规则生成与检查代码;完成前运行 ./vendor/bin/phpstan analyse --level=8 && ./vendor/bin/phpunit 且零警告。

适用场景:Laravel 应用开发、Eloquent 查询编写、迁移设计、API 资源设计、队列任务与 PHPUnit 测试。

限制:以上均为资料中给出的约定与建议,并非强制标准;具体项目适用性、第三方服务配置与生产性能调优细节需以实际环境为准,资料未提供价格、平台支持与安装来源信息。