Agent-skills-standard laravel-clean-architecture
Implement Domain-Driven Design with typed DTOs, repository interfaces, and single-responsibility Action classes in Laravel. Use when creating domain folders, binding repository contracts in providers, or passing DTOs between layers. (triggers: app/Domains/**/*.php, app/Providers/*.php, domain, dto, repository, contract, adapter)
install
source · Clone the upstream repo
git clone https://github.com/HoangNguyen0403/agent-skills-standard
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/HoangNguyen0403/agent-skills-standard "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/laravel/laravel-clean-architecture" ~/.claude/skills/hoangnguyen0403-agent-skills-standard-laravel-clean-architecture && rm -rf "$T"
manifest:
skills/laravel/laravel-clean-architecture/SKILL.mdsource content
Laravel Clean Architecture
Priority: P1 (HIGH)
Workflow: Add Domain Feature
- Create domain folder —
.app/Domains/Order/{Actions,DTOs,Contracts}/ - Define DTO — Create
with typed constructor properties.readonly class - Create contract — Define repository interface in
.Contracts/ - Implement repository — Build Eloquent implementation; bind in
.AppServiceProvider - Write Action class — Single-responsibility use-case logic consuming DTO.
- Verify bindings — Run
and resolve interface to confirm DI works.php artisan tinker
Action + DTO Example
See implementation examples for Action class with DTO and domain structure patterns.
Implementation Guidelines
Domain-Driven Design (DDD)
- Grouping: Organize code in
. Group by business domain (app/Domains/Order/{Actions,DTOs,Contracts}/
) — not by type (Controllers, Models).User, Order, Payment - Core Models: Keep standard Eloquent models in
.app/Models/ - Separation: Never put Eloquent queries in controllers; delegate to Action classes for use-case logic.
Data Transfer Objects (DTOs)
- Immutability: Use
(PHP 8.2+) orreadonly class
properties (PHP 8.1+). DTOs cross boundaries — pass between layers instead of raw arrays or Eloquent models.readonly
Repository Pattern & Decoupling
- Interfaces: Create
and implementContracts/OrderRepository interface
.EloquentOrderRepository - Binding: Bind interfaces to implementations in
viaAppServiceProvider
.$this->app->bind(OrderRepository::class, EloquentOrderRepository::class) - Usage: Inject interfaces into your actions/services.
- Layer Flow: Controller → Action → Repository Interface → Eloquent. DTOs cross boundaries at every layer transition.
Anti-Patterns
- No Eloquent in Controllers: Bridge layers with DTOs and Actions.
- No raw arrays across layers: Use typed
DTOs.readonly - No God Services: Break into single-responsibility Actions.
- No concrete dependencies: Depend on Interfaces, not implementations.