Pular para o conteúdo
Skillpedia
Código em geral280 mil · #74

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

https://github.com/affaan-m/ECC/blob/main/pi/core/skills/laravel-patterns/SKILL.md

Mensagem pronta para colar

Use esta skill para me ajudar: https://github.com/affaan-m/ECC/blob/main/pi/core/skills/laravel-patterns/SKILL.md Leia o arquivo SKILL.md desse link e siga as instruções dele na minha tarefa.
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-patterns

Ou baixe só o arquivo:

curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/laravel-patterns/SKILL.md -o SKILL.md
Conteú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, conversation vs conversations).
  • Use um único nome de parâmetro que corresponda ao modelo vinculado (por exemplo, {conversation} para Conversation).
  • 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

Essa skill é útil?

0

Entre para votar.

Comentários

  • …

Mais skills deste repositório

Skills parecidas