salehhashemi/laravel-domain-expert

An intuitive Laravel package to streamline Domain Driven Development by simplifying domain creation, management, and organization within your applications.

v1.4.1 2023-04-17 18:47 UTC

This package is auto-updated.

Last update: 2024-12-20 15:19:05 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions GitHub Code Style Action Status StyleCI

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.