salehhashemi / laravel-domain-expert
An intuitive Laravel package to streamline Domain Driven Development by simplifying domain creation, management, and organization within your applications.
Requires
- php: ^8.0
- illuminate/support: ^8.0|^9.0|^10.0
Requires (Dev)
- laravel/pint: ^1.8
- orchestra/testbench: ^6.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^9.0
README
Laravel Domain Expert is a package that helps you create and manage domain-driven directory structures in your Laravel application. It automates the process of setting up a new domain with the necessary folders, a controller, and a simple route file with a route group and a domain prefix.
AI-Powered Domain Recommendation
Laravel Domain Expert includes an AI-powered domain recommendation feature that helps you automatically group and organize your existing controllers and models into domain-driven structures.
To use this feature, run the following command:
php artisan suggest:domains
The AI will guess the purpose of your application and provide a well-structured organization without requiring any additional input from the user.
Sample output of AI system
Installation
To install Laravel Domain Expert, you can use Composer:
composer require salehhashemi/laravel-domain-expert
Usage
Creating a new domain
To create a new domain directory structure, run the following command:
php artisan make:domain DomainName
Replace DomainName with the desired name for your domain.
The command will create a domain directory structure in your Laravel application, including a sample controller and a simple route file with a route group and a domain prefix.
Domain Structure
When you create a new domain using the php artisan make:domain DomainName
command, the following directory structure will be generated:
Domains └── DomainName ├── Exceptions ├── Http │ ├── Controllers │ │ ├── DomainNameController.php │ ├── Middleware │ └── Requests ├── Jobs ├── Models ├── Observers ├── Repositories ├── resources │ ├── css │ ├── js │ └── views ├── routes │ └── web.php └── Services
This structure helps you organize your code in a domain-driven manner, making it easier to manage and maintain as your application grows.
Creating controllers within a domain
To create a new controller within a specific domain, use the -d or --domain flag:
php artisan make:controller ControllerName -d
or
php artisan make:controller ControllerName --domain
When using the -d or --domain flag, you will be prompted to select the domain you'd like to create the controller in.
Other commands
You can do the same routine to make:
- observers
php artisan make:observer ObserverName --domain
- models
php artisan make:model ModelName --domain
Auto-loading Routes and Views
The package includes built-in support for automatically loading routes and views for each domain. When your package is installed and the service provider is registered, the DomainAutoScanServiceProvider class will scan the Domains directory and automatically discover and load the route and view files for each domain.
Example: Calling views in controllers
To reference a view within a domain, use the domain name as the namespace, followed by two colons and the view file path. Here's an example of how to call a view in a controller:
return view('DomainName::view-name');
Testing
composer test
Changelog
Please see CHANGELOG for more information what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Credits
License
The MIT License (MIT). Please see License File for more information.