关于 laravel-iterating-on-code
帮助开发者通过明确反馈和逐步修改来改进 AI 生成的 PHP 代码。提供定位问题、说明影响、展示修复方案并逐项验证的模式。
主要功能
- 01具体反馈模式
- 02问题、影响与修复示例
- 03逐步验证指导
- 04正确性与代码风格示例
适用场景
- 01修正验证规则
- 02补充缺失的错误处理
- 03优化查询性能
- 04使代码符合风格规范
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ noartem/ skills --skill laravel-iterating-on-code安装后在 Claude Code 中输入/laravel-iterating-on-code确认已加载。
详细介绍
迭代优化代码
AI 生成的代码很少能一次就完美。有效的迭代能帮你从“差不多”提升到“恰到好处”。
不正确的代码
含糊的反馈
“这个不行”
具体的反馈
“验证逻辑不正确:
当前代码:
'email' => 'required|email|unique:users'
问题: 这段代码允许将用户的邮箱更新为其他用户已使用的邮箱。唯一性规则需要忽略当前用户。
修复:
'email' => [
'required',
'email',
Rule::unique('users')->ignore($this->user()->id)
]
这样用户可以保留自己的邮箱,同时避免与其他用户的邮箱重复。”
为什么有效: 指出了具体问题,解释了错误原因,并展示了正确的解决方案。
不完整的代码
含糊的反馈
“好像缺了点什么”
具体的反馈
“OrderService 缺少错误处理:
当前实现:
public function createOrder(array $data): Order
{
$order = Order::create($data);
$this->processPayment($order);
return $order;
}
缺少的内容:
- 事务封装(付款和创建订单应该是原子操作)
- 付款失败处理
- 创建订单前验证库存
- 成功创建后分发事件
添加:
DB::transaction(function () use ($data) {
$this->validateInventory($data['items']);
$order = Order::create($data);
$this->processPayment($order);
event(new OrderCreated($order));
return $order;
});
另外,添加 try/catch 来处理付款失败。”
为什么有效: 列出了具体缺失的内容及其背景,并展示了如何添加。
需要优化
含糊的反馈
“改进一下”
具体的反馈
“优化查询以提升性能:
当前代码:
$products = Product::all()->filter(function ($product) {
return $product->isActive() && $product->inStock();
});
问题:
- 将所有产品加载到内存中(大型数据集下效率低)
- 在 PHP 中而非数据库中进行筛选
- 对每个产品调用方法(可能导致 N+1 问题)
优化后:
$products = Product::query()
->where('active', true)
->where('stock_quantity', '>', 0)
->get();
将筛选移到数据库中,使用已建立索引的列,并避免加载不必要的数据。”
为什么有效: 解释了需要优化的内容及原因,并展示了改进后的版本。
风格问题
含糊的反馈
“遵循我们的风格指南”
具体的反馈
“按照我们的编码规范更新:
当前代码:
public function get_user_orders($userId) {
return Order::where('user_id', $userId)->get();
}
风格问题:
- 方法名应采用 camelCase:
getUserOrders - 参数应采用 camelCase:
$userId✓(已经正确) - 缺少返回类型提示
- 复杂查询缺少文档块
修正后:
/**
* Get all orders for a specific user.
*/
public function getUserOrders(int $userId): Collection
{
return Order::where('user_id', $userId)->get();
}
参阅我们的风格指南:docs/coding-standards.md”
为什么有效: 指出了具体的风格问题,展示了修正方式,并引用了风格指南。
增量验证
不好的做法
“更改验证逻辑、添加错误处理、重构服务、更新测试并添加日志”
好的做法
“我们一步一步来:
步骤 1: 首先修复验证问题
'email' => Rule::unique('users')->ignore($this->user()->id)
我们先确认这部分有效,再继续下一步。”
[确认验证有效后]
“步骤 2: 现在为付款处理添加错误处理
try {
$this->processPayment($order);
} catch (PaymentException $e) {
Log::error('Payment failed', ['order' => $order->id]);
throw new OrderProcessingException('Payment failed', previous: $e);
}
继续之前,先测试一下。”
为什么有效: 一次只做一项更改,逐步验证,逐步建立信心。
反馈模式
模式:指出问题 + 解释原因 + 展示修复
"The relationship is incorrect:
**Current:** `return $this->hasMany(Post::class);`
**Problem:** A User has many Posts, but you're defining this in the Post model. This creates a circular relationship.
**Fix:** Move this to the User model, or if you meant Post belongs to User:
```php
// In Post model
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
```"
模式:指出缺失 + 说明重要性 + 展示添加方式
"Missing authorization check:
**Why it matters:** Any authenticated user can delete any order, not just their own.
**Add this to OrderController@destroy:**
```php
$this->authorize('delete', $order);
并创建策略方法:
// In OrderPolicy
public function delete(User $user, Order $order): bool
{
return $user->id === $order->user_id;
}
```"
模式:当前代码 + 问题 + 改进方案
"Current implementation has issues:
**Current:**
```php
foreach ($orders as $order) {
$order->load('items', 'customer', 'shipping');
}
问题:
- N+1 查询(在循环中加载关联关系)
- 对大型数据集效率低
改进后:
$orders = Order::with(['items', 'customer', 'shipping'])->get();
使用单次查询并预加载关联关系。”
## Quick Reference
Iterate effectively:
- **Be specific** - Point to exact lines, explain exact problems
- **Show, don't just tell** - Provide corrected code
- **Explain why** - Help the AI understand the reasoning
- **One change at a time** - Validate incrementally
- **Reference standards** - Point to style guides, docs, examples
Specific feedback = better iterations = code that fits your needs.