关于 laravel:specifying-constraints
为 Laravel 编码 Agent 提供约束编写指南,涵盖性能、安全、测试、架构和依赖要求,帮助将项目需求转化为具体实现标准。
主要功能
- 01性能与数据库约束示例
- 02安全要求示例
- 03测试要求与模板
- 04架构模式约束
- 05依赖版本与兼容性要求
适用场景
- 01为搜索功能明确响应时间和并发目标
- 02规定 API 的验证、授权与数据保护
- 03为测试设定覆盖率和边界场景
- 04指定支付功能应遵循的分层模式
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ jpcaparas/ superpowers-laravel --skill laravel:specifying-constraints安装后在 Claude Code 中输入/laravel:specifying-constraints确认已加载。
详细介绍
指定约束
约束可引导 AI 提供符合项目要求的解决方案。没有约束时,你得到的代码可能很通用,无法满足你的要求。
性能约束
模糊
“让它更快”
具体
“优化商品搜索:
- 第 95 百分位的响应时间 < 200ms
- 支持 1000 个并发用户
- 使用 Redis 缓存结果 5 分钟
- 在
name、category_id、published_at上使用数据库索引 - 对结果分页,每页最多 50 条
- 使用预加载避免 N+1 查询”
数据库性能
“在性能约束下查询订单:
- 使用
select()仅加载所需列 - 在一次查询中预加载
items、customer、shipping_address - 在
(user_id, created_at, status)上添加复合索引 - 使用
chunk()批量处理超过 1000 条的记录 - 将查询超时设为 5 秒”
安全约束
模糊
“让它更安全”
具体
“按照以下安全要求实现用户资料更新:
- 使用
ProfilePolicy@update进行授权 - 在
ProfileUpdateRequest中验证所有输入 - 清理个人简介字段中的 HTML(移除脚本,允许基本格式)
- 将每位用户的请求速率限制为每分钟 10 次
- 使用 bcrypt 对密码进行哈希处理(成本因子为 12)
- 记录所有资料变更以供审计
- 使用
$fillable防止批量赋值漏洞”
API 安全
“保护支付 API:
- 要求使用
auth:sanctum中间件 - 验证 API 令牌是否具有
process-payments权限 - 仅使用 HTTPS(在中间件中强制执行)
- 验证支付提供商的 Webhook 签名
- 在数据库中加密存储敏感数据
- 绝不记录信用卡号或令牌
- 返回通用错误消息(不要泄露系统详情)”
测试约束
模糊
“添加测试”
具体
“测试订单处理功能:
- 对完整订单流程(创建 → 处理 → 确认)进行功能测试
- 对 OrderService 方法进行单元测试
- 测试验证失败情况(支付无效、库存不足)
- 测试边界情况(数量为零、价格为负)
- 模拟外部支付网关
- 使用工厂生成测试数据
- 业务逻辑的代码覆盖率目标为 80%
- 测试必须在 < 30 秒内运行完毕”
测试要求
“身份验证测试要求:
- 测试使用有效凭据成功登录
- 测试使用无效凭据登录失败
- 测试速率限制(每分钟最多 5 次尝试)
- 测试令牌在 24 小时后过期
- 测试退出登录会使令牌失效
- 使用
RefreshDatabasetrait - 测试中不得调用外部 API(使用模拟对象)”
架构约束
遵循的模式
“按照我们的架构实现支付处理:
- 使用仓储模式:
PaymentRepository用于数据访问 - 使用服务层:
PaymentService用于业务逻辑 - 使用作业处理异步工作:
ProcessPaymentJob - 使用事件:
PaymentProcessed、PaymentFailed - 控制器仅负责协调,不包含业务逻辑
- 每个方法的圈复杂度保持在 < 7
- 遵循 SOLID 原则”
避免的模式
“在以下约束下实现用户管理:
- 不要在业务逻辑中使用静态方法或 Facade
- 不要将业务逻辑放入控制器或模型
- 不要使用全局状态或单例
- 不要混淆关注点(分离验证、业务逻辑和持久化)
- 不要使用原始 SQL 查询(使用 Eloquent 或 Query Builder)
- 不要绕过授权检查”
依赖约束
版本要求
“添加图像处理功能:
- 使用
intervention/image^3.0(兼容 Laravel 13.x) - 需要 PHP 8.2+
- 需要 GD 或 Imagick 扩展
- 与现有的
spatie/laravel-medialibrary^11.0 兼容 - 不得与当前依赖冲突”
软件包选择
“选择一个用于生成 PDF 的软件包:
- 必须支持 Laravel 13.x
- 必须能处理 UTF-8 和特殊字符
- 应支持页眉和页脚
- 优先选择积极维护的软件包(最近 6 个月内有更新)
- 检查与我们的 PHP 8.2 要求的兼容性
- 可考虑:
barryvdh/laravel-dompdf或spatie/laravel-pdf”
约束模板
性能模板
- Response time: < X ms
- Throughput: Y requests/second
- Cache strategy: Redis, TTL Z minutes
- Database: indexes on [columns], eager load [relationships]
- Pagination: max X per page
安全模板
- Authentication: [Sanctum/Passport/Session]
- Authorization: [Policy/Gate]
- Validation: [Form Request class]
- Rate limiting: X requests per Y minutes
- Data protection: [encryption/hashing requirements]
- Audit logging: [what to log]
测试模板
- Coverage: X% on business logic
- Test types: [feature/unit/integration]
- Mocking: [external services to mock]
- Factories: [models to factory]
- Performance: tests complete in < X seconds
- Edge cases: [specific scenarios to test]
快速参考
明确指定约束:
- 性能 - 响应时间、吞吐量、缓存、索引
- 安全 - 身份验证、校验、速率限制、数据保护
- 测试 - 覆盖率、测试类型、模拟、边界情况
- 架构 - 应遵循/避免的模式、复杂度限制
- 依赖项 - 版本、兼容性、软件包要求
明确的约束 = 符合项目需求的代码。
评论
支持 Markdown