alibori / laravel-ddd-domain-resources
Package to generate domain resources for a Laravel DDD application.
Requires
- php: ^8.1
- spatie/laravel-package-tools: ^1.14.0
Requires (Dev)
- laravel/pint: ^1.6
- nunomaduro/collision: ^6.0
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^7.22
- pestphp/pest: ^1.22
- pestphp/pest-plugin-laravel: ^1.4
- phpstan/extension-installer: ^1.1
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
README
Package to generate domain resources for a Laravel DDD application.
Compatible with Laravel 9.x and 10.x.
Keeping in mind that DDD architecture in a Laravel application has a lot of different approaches, this package is intended to be used as a vertical slice of a DDD implementation. Also, it has some basic stub files that can be customized to fit your needs.
Installation
You can install the package via composer:
composer require alibori/laravel-ddd-domain-resources --dev
You can publish the config file with:
php artisan vendor:publish --tag="ddd-domain-resources-config"
This is the contents of the published config file:
<?php declare(strict_types=1); // config for Alibori/LaravelDddDomainResources package return [ /** * Here goes the path to your DDD Domains folder. */ 'domains_path' => 'app\\Domains', /** * Here goes all your desired DDD Domain Resources configuration. */ 'domains' => [ /** * 'user' => [ * 'name' => 'User', * 'namespace' => 'App\\Domains\\User', * ], */ ] ];
Optionally, you can publish the stubs using
php artisan vendor:publish --tag="ddd-domain-resources-stubs"
Usage
Generate a domain directory structure
Once the package's config file is published and filled, you can generate a domain directory structure with the following command:
php artisan domain:generate user --scaffold
This will generate the following directory structure:
├── app
│ └── Domains
│ └── User
│ ├── Application
│ ├── Domain
│ │ ├── Contracts
│ │ ├── Events
│ │ ├── Exceptions
│ │ ├── ValueObjects
│ ├── Infrastructure
│ │ ├── Repositories
Generate a domain resource
In base of the previous directory structure, you can generate a domain resource file with the following command:
php artisan domain:generate user {file-type}
Where {file-type}
can be one of the following:
use_case
contract
event
exception
value_object
repository
controller
For example, to generate a UseCase
file, you can run the following command:
php artisan domain:generate user use_case
When you run this command, you will be prompted to enter the name of the resource. For example, if you want to generate a CreateUser
use case, you can enter CreateUser
as the resource name.
Testing
composer test
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security Vulnerabilities
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.