帮助开发者掌握 Laravel 生产级架构模式与核心后端实现方法。
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "laravel-patterns" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/skills/laravel-patterns/SKILL.md 2. 保存为 ~/.claude/skills/laravel-patterns/SKILL.md 3. 装好后重载技能,告诉我可以用了
请用 Laravel 最佳实践设计一个订单模块的服务层架构,包含 Controller、Service、Repository(如有必要)、Job、Event 与 API Resource,并说明各层职责与目录结构。
给出清晰的 Laravel 分层方案、职责说明与可落地的项目结构建议。
我有一个 Laravel 接口在读取订单、用户和商品关系时很慢,请分析可能的 N+1 问题,并提供使用 eager loading、索引、缓存和查询重构的优化方案与示例代码。
输出性能瓶颈分析、优化思路以及对应的 Laravel 查询与缓存示例代码。
请为 Laravel 电商应用设计一个下单后的异步处理流程,要求使用 Queue、Event、Listener 和缓存,覆盖库存扣减、通知发送和失败重试机制。
提供完整的异步架构流程、关键组件划分和适合生产环境的实现建议。
Production-grade Laravel architecture patterns for scalable, maintainable applications.
config/* and keep environments explicit.Use a conventional Laravel layout with clear layer boundaries (HTTP, services/actions, models).
app/
├── Actions/ # Single-purpose use cases
├── Console/
├── Events/
├── Exceptions/
├── Http/
│ ├── Controllers/
│ ├── Middleware/
│ ├── Requests/ # Form request validation
│ └── Resources/ # API resources
├── Jobs/
├── Models/
├── Policies/
├── Providers/
├── Services/ # Coordinating domain services
└── Support/
config/
database/
├── factories/
├── migrations/
└── seeders/
resources/
├── views/
└── lang/
routes/
├── api.php
├── web.php
└── console.php
Keep controllers thin. Put orchestration in services and single-purpose logic in actions.
final class CreateOrderAction
{
public function __construct(private OrderRepository $orders) {}
public function handle(CreateOrderData $data): Order
{
return $this->orders->create($data);
}
}
final class OrdersController extends Controller
{
public function __construct(private CreateOrderAction $createOrder) {}
public function store(StoreOrderRequest $request): JsonResponse
{
$order = $this->createOrder->handle($request->toDto());
return response()->json([
'success' => true,
'data' => OrderResource::make($order),
'error' => null,
'meta' => null,
], 201);
}
}
Prefer route-model binding and resource controllers for clarity.
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('projects', ProjectController::class);
});
Use scoped bindings to prevent cross-tenant access.
Route::scopeBindings()->group(function () {
Route::get('/accounts/{account}/projects/{project}', [ProjectController::class, 'show']);
});
conversation vs conversations).{conversation} for Conversation).use App\Http\Controllers\Api\ConversationController;
use App\Http\Controllers\Api\MessageController;
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->prefix('conversations')->group(function () {
Route::post('/', [ConversationController::class, 'store'])->name('conversations.store');
Route::scopeBindings()->group(function () {
Route::get('/{conversation}', [ConversationController::class, 'show'])
->name('conversations.show');
Route::post('/{conversation}/messages', [MessageController::class, 'store'])
->name('conversation-messages.store');
Route::get('/{conversation}/messages/{message}', [MessageController::class, 'show'])
->name('conversation-messages.show');
});
});
…
提供 Django 架构模式、DRF 接口设计与生产级开发最佳实践指导