PHPackages                             laymont/hexagonal-architecture - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. laymont/hexagonal-architecture

ActiveLibrary[Framework](/categories/framework)

laymont/hexagonal-architecture
==============================

Paquete para implementar arquitectura hexagonal en laravel

00PHP

Since May 14Pushed 1y ago1 watchersCompare

[ Source](https://github.com/laymont/HexagonalArchitecture)[ Packagist](https://packagist.org/packages/laymont/hexagonal-architecture)[ RSS](/packages/laymont-hexagonal-architecture/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (2)Used By (0)

Arquitectura Hexagonal para Laravel 12
======================================

[](#arquitectura-hexagonal-para-laravel-12)

Este paquete proporciona una estructura base para implementar la arquitectura hexagonal (también conocida como Puertos y Adaptadores) en proyectos Laravel 12, facilitando la separación de preocupaciones y el cumplimiento de principios SOLID.

Características
---------------

[](#características)

- Estructura base para arquitectura hexagonal en Laravel
- Migración automática de modelos existentes a la arquitectura hexagonal
- Integración transparente con el ecosistema Laravel
- Soporte para proyectos nuevos y existentes
- Tipado fuerte y validaciones para todos los componentes

Instalación
-----------

[](#instalación)

```
composer require laymont/hexagonal-architecture
```

Luego, publica los archivos de configuración:

```
php artisan vendor:publish --provider="Laymont\HexagonalArchitecture\Providers\HexagonalServiceProvider" --tag="config"
```

Configuración
-------------

[](#configuración)

El archivo `config/hexagonal.php` contiene la configuración del paquete:

```
return [
    // Configuración de rutas para las capas de arquitectura hexagonal
    'paths' => [
        'domain' => [
            'entities' => 'src/Domain/Entities',
            'value_objects' => 'src/Domain/ValueObjects',
            'exceptions' => 'src/Domain/Exceptions',
        ],
        'application' => [
            'ports' => 'src/Application/Ports',
            'use_cases' => 'src/Application/UseCases',
        ],
        'infrastructure' => [
            'adapters' => 'src/Infrastructure/Adapters',
            'controllers' => 'src/Infrastructure/Controllers',
        ],
    ],

    // Configuración para migración de modelos
    'models' => [
        'user' => [
            'model_class' => '\App\Models\User',
            'domain_fields' => ['id', 'name', 'email'],
        ],
        // Añade aquí otros modelos que desees migrar...
    ],

    // Si se deben crear providers automáticamente
    'create_providers' => true,
];
```

Uso
---

[](#uso)

### Migración de modelos a arquitectura hexagonal

[](#migración-de-modelos-a-arquitectura-hexagonal)

Para migrar un modelo existente a la arquitectura hexagonal:

1. Configura el modelo en `config/hexagonal.php`:

```
'models' => [
    'user' => [
        'model_class' => '\App\Models\User',
        'domain_fields' => ['id', 'name', 'email', 'password'],
    ],
    'product' => [
        'model_class' => '\App\Models\Product',
        'domain_fields' => ['id', 'name', 'price', 'description'],
    ],
],
```

2. Ejecuta el comando de migración:

```
php artisan hexagonal:migrate User
```

O para otro modelo:

```
php artisan hexagonal:migrate Product
```

El comando generará automáticamente:

- Entidades de dominio
- Objetos de valor
- Excepciones específicas
- Interfaces de puertos (entrada/salida)
- Casos de uso
- Adaptadores de repositorio
- Controladores
- Proveedores de servicios

### Uso de los componentes generados

[](#uso-de-los-componentes-generados)

Una vez migrado un modelo, puedes utilizar los casos de uso en tus controladores:

```
use Src\Application\Ports\Inbound\UserServiceInterface;

class ApiUserController extends Controller
{
    public function store(Request $request, UserServiceInterface $userService)
    {
        $data = $request->validate([
            'name' => 'required',
            'email' => 'required|email|unique:users',
            'password' => 'required|min:8',
        ]);

        try {
            $user = $userService->create($data);
            return response()->json($user->toArray(), 201);
        } catch (\Exception $e) {
            return response()->json(['error' => $e->getMessage()], 500);
        }
    }
}
```

### Extendiendo la funcionalidad

[](#extendiendo-la-funcionalidad)

Puedes extender la funcionalidad creando nuevos casos de uso que implementen la interfaz del servicio.

Estructura generada
-------------------

[](#estructura-generada)

```
src/
├── Domain/
│   ├── Entities/
│   │   └── User.php
│   ├── ValueObjects/
│   │   └── AdditionalUserInfo.php
│   └── Exceptions/
│       ├── DomainException.php
│       └── UserNotFoundException.php
├── Application/
│   ├── Ports/
│   │   ├── Inbound/
│   │   │   └── UserServiceInterface.php
│   │   └── Outbound/
│   │       └── UserRepositoryInterface.php
│   └── UseCases/
│       ├── CreateUser.php
│       ├── UpdateUser.php
│       └── DeleteUser.php
└── Infrastructure/
    ├── Adapters/
    │   └── Database/
    │       └── UserRepository.php
    └── Controllers/
        └── UserController.php

```

Contribución
------------

[](#contribución)

Las contribuciones son bienvenidas y serán totalmente acreditadas.

Licencia
--------

[](#licencia)

Este paquete es software de código abierto licenciado bajo la [Licencia MIT](LICENSE).

###  Health Score

15

—

LowBetter than 3% of packages

Maintenance36

Infrequent updates — may be unmaintained

Popularity0

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity17

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/fcdd090be983e93734294b788cdf18c525865502709f9074ac3d4c844429a3a6?d=identicon)[laymont](/maintainers/laymont)

---

Top Contributors

[![laymont](https://avatars.githubusercontent.com/u/13275422?v=4)](https://github.com/laymont "laymont (3 commits)")

### Embed Badge

![Health badge](/badges/laymont-hexagonal-architecture/health.svg)

```
[![Health](https://phpackages.com/badges/laymont-hexagonal-architecture/health.svg)](https://phpackages.com/packages/laymont-hexagonal-architecture)
```

###  Alternatives

[laravel/passport

Laravel Passport provides OAuth2 server support to Laravel.

3.4k85.0M532](/packages/laravel-passport)[nolimits4web/swiper

Most modern mobile touch slider and framework with hardware accelerated transitions

41.8k177.2k1](/packages/nolimits4web-swiper)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k36.7M259](/packages/laravel-dusk)[laravel/prompts

Add beautiful and user-friendly forms to your command-line applications.

712181.8M596](/packages/laravel-prompts)[cakephp/chronos

A simple API extension for DateTime.

1.4k47.7M121](/packages/cakephp-chronos)[laravel/pail

Easily delve into your Laravel application's log files directly from the command line.

91545.3M590](/packages/laravel-pail)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
