pushberryfinn / laravel-domains
A Laravel package to manage and create modular domains inside your app
Requires
- php: ^8.2
- illuminate/support: ^11.0
Requires (Dev)
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
This package is auto-updated.
Last update: 2026-05-10 03:14:00 UTC
README
A Laravel package to manage and create modular domains inside your Laravel app.
Overview
This package helps you organise your Laravel application by grouping related code (models, controllers, migrations, routes, commands, etc.) into domains — self-contained folders under app/Domains. Routes, migrations, and commands are automatically discovered and loaded for each domain.
Requirements
- PHP 8.2 or higher
- Laravel 11.x
Installation
composer require pushberryfinn/laravel-domains
Optionally publish the config file:
php artisan vendor:publish --tag=laravel-domains-config
Usage
Create a domain
php artisan domain:make Doctors
This creates the following structure under app/Domains:
app/Domains/
├── DomainsServiceProvider.php ← created once on first domain
└── Doctors/
├── Console/Commands/
├── Http/Controllers/
├── Http/Requests/
├── Models/
├── database/migrations/
└── routes/api.php
Important: After running
domain:makefor the first time, registerDomainsServiceProviderinbootstrap/providers.php:return [ App\Providers\AppServiceProvider::class, App\Domains\DomainsServiceProvider::class, ];
Generate domain resources
# Model php artisan domain:make-model Doctor --domain=Doctors # Controller php artisan domain:make-controller DoctorController --domain=Doctors # Form Request php artisan domain:make-request StoreDoctorRequest --domain=Doctors # Migration php artisan domain:make-migration create_doctors_table --domain=Doctors # Artisan command php artisan domain:make-command SyncDoctors --domain=Doctors
How it works
- Every folder inside
app/Domainsis treated as a domain. DomainsServiceProvider(placed inapp/Domains) automatically loads each domain's migrations, routes, and console commands.- Console commands placed in
{Domain}/Console/Commands/are auto-registered.
Facade
You can use the LaravelDomains facade to list all registered domains at runtime:
use LaravelDomains; $domains = LaravelDomains::domains(); // ['Doctors', 'Patients', ...]
License
The MIT License (MIT). See the LICENSE file for details.
Author
Atdhe Krasniqi — GitHub