laravel-patterns
Faz seu agente construir aplicações Laravel robustas e eficientes. Orienta na criação de rotas, modelos, serviços e filas para aplicações de produção.
O que ela faz
Este guia ensina como organizar e estruturar projetos feitos com Laravel, um framework de programação web. Ele mostra como fazer o código ficar mais limpo, fácil de entender e de dar manutenção, usando boas práticas.
Quando usar
- ✓Ao iniciar um novo projeto Laravel.
- ✓Ao revisar ou melhorar um projeto Laravel existente.
- ✓Ao trabalhar com rotas, modelos de dados (Eloquent) ou lógica de negócio.
Exemplo do que pedir para a IA
“Como posso organizar melhor meu código em um projeto Laravel para torná-lo mais escalável?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele sugere separar as responsabilidades em diferentes partes do código, como controladores, serviços e modelos. Também orienta sobre como usar recursos do Laravel como filas, eventos e cache para otimizar o desempenho.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill laravel-patternsOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/laravel-patterns/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Desenvolvimento Laravel
Padrões de arquitetura Laravel de nível de produção para aplicações escaláveis e de fácil manutenção.
Quando Usar
- Construindo aplicações web ou APIs Laravel
- Estruturando controllers, services e lógica de domínio
- Trabalhando com modelos e relacionamentos Eloquent
- Projetando APIs com resources e paginação
- Adicionando filas, eventos, cache e jobs em segundo plano
Como Funciona
- Estruture a aplicação em torno de limites claros (controllers -> services/actions -> models).
- Use explicit bindings e scoped bindings para manter o roteamento previsível; ainda assim, reforce a autorização para controle de acesso.
- Prefira modelos tipados, casts e scopes para manter a lógica de domínio consistente.
- Mantenha o trabalho intensivo de IO em filas e cacheie leituras caras.
- Centralize a configuração em
config/*e mantenha os ambientes explícitos.
Exemplos
Estrutura do Projeto
Use um layout Laravel convencional com limites de camada claros (HTTP, services/actions, models).
Layout Recomendado
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
Controllers -> Services -> Actions
Mantenha os controllers enxutos. Coloque a orquestração em services e a lógica de propósito único em 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);
}
}
Roteamento e Controllers
Prefira route-model binding e resource controllers para clareza.
use Illuminate\Support\Facades\Route;
Route::middleware('auth:sanctum')->group(function () {
Route::apiResource('projects', ProjectController::class);
});
Route Model Binding (Escopo)
Use bindings com escopo para prevenir acesso entre tenants.
Route::scopeBindings()->group(function () {
Route::get('/accounts/{account}/projects/{project}', [ProjectController::class, 'show']);
});
Rotas Aninhadas e Nomes de Binding
- Mantenha prefixos e caminhos consistentes para evitar aninhamento duplo (por exemplo,
conversationvsconversations). - Use um único nome de parâmetro que corresponda ao modelo vinculado (por exemplo,
{conversation}paraConversation). - Prefira bindings com escopo ao aninhar para reforçar relacionamentos pai-filho.
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');
});
});
Se você quiser que um parâmetro resolva para uma classe de modelo diferente, defina um binding explícito. Para lógica de binding personalizada, use Route::bind() ou implemente resolveRouteBinding() no modelo.
use App\Models\AiConversation;
use Illuminate\Support\Facades\Route;
Route::model('conversation', AiConversation::class);
Bindings do Service Container
Vincule interfaces a implementações em um service provider para uma ligação de dependência clara.
use App\Repositories\EloquentOrderRepository;
use App\Repositories\OrderRepository;
use Illuminate\Support\ServiceProvider;
…
Perguntas frequentes
O que são 'padrões de arquitetura'?
São formas testadas e aprovadas de organizar o código de um programa para que ele seja mais fácil de entender, manter e crescer.
O que é Eloquent ORM?
É uma ferramenta do Laravel que facilita a interação com o banco de dados, permitindo que você use código PHP para representar e manipular seus dados, em vez de escrever SQL diretamente.
Por que usar 'camadas' (layers) no código?
Separar o código em camadas (como interface, lógica de negócio e acesso a dados) ajuda a organizar as tarefas e torna mais fácil modificar uma parte sem afetar as outras.
Detalhes
Descrição original do autor
Laravel architecture patterns, routing/controllers, Eloquent ORM, service layers, queues, events, caching, and API resources for production apps. Use when building or reviewing Laravel apps — controllers, Eloquent, service layers, queues, or API resources.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #74
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
karpathy-guidelines
Ajuda seu agente a escrever código melhor, evitando erros comuns. É útil para garantir que o código seja simples, claro e fácil de verificar.
multica-ai/andrej-karpathy-skills
skill-creator
Permite ao agente criar, modificar e otimizar habilidades. Útil para testar o desempenho de habilidades e melhorar sua precisão.
anthropics/skills
ponytail-debt
Lista todos os atalhos de código ('shortcut:') deixados para depois. Ajuda a ver o que ainda precisa ser corrigido no projeto.
DietrichGebert/ponytail