https://github.com/phpsquad/domain-maker
Domain Maker makes Domain Driven Development easier in Laravel by providing you with a set of commands to create the scaffolding and boilerplate laravel normally provides but tailored to a Domain Oriented Structure.
https://github.com/phpsquad/domain-maker
domain-driven-design laravel php
Last synced: 3 months ago
JSON representation
Domain Maker makes Domain Driven Development easier in Laravel by providing you with a set of commands to create the scaffolding and boilerplate laravel normally provides but tailored to a Domain Oriented Structure.
- Host: GitHub
- URL: https://github.com/phpsquad/domain-maker
- Owner: phpsquad
- License: mit
- Created: 2021-12-20T09:16:24.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-02-17T08:16:49.000Z (about 3 years ago)
- Last Synced: 2025-12-21T18:51:16.884Z (4 months ago)
- Topics: domain-driven-design, laravel, php
- Language: PHP
- Homepage:
- Size: 81.1 KB
- Stars: 86
- Watchers: 5
- Forks: 17
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Domain Maker for Laravel
[](LICENSE.md)
## The Why
Domain Driven Design helps us to organize our thoughts and to build apps using logical grouping of our code.
If you've ever worked on a large laravel project you know how that model directory can grow so large that your ability to find things becomes hampered.
I was inspired by this article https://freek.dev/1486-getting-started-with-domain-oriented-laravel from Freek at Spatie to refactor to Domains.
I love it! It makes it so much easier to focus on a specific issue without the need to traverse the entire code base.
If I'm working on Payments, I live in the payments Domain.
I soon realized refactoring to DDD is pretty straight forward, but the typically wonderful development experience I've grown used to with laravel
left a bit to be desired.
Also, what if I know my project is going to be large, and I want to get a head start and begin development using DDD?
That's why this package exists.
## How can Domain Maker help you?
Domain Maker makes Domain Driven Development easier in Laravel by providing you with a set of commands to create the scaffolding and boilerplate
laravel normally provides but tailored to a Domain Oriented Structure.
- Helpful Commands to:
- Automatically scaffold a new Domain with the often needed directories and classes
- create controllers
- create route files
- create models
- create repositories
- Automatic Routes discovery (no need to register routes in the RouteServiceProvider)
- Automatic View discovery (no need to add view path to config)
### All Domain Maker Commands are under the prefix domain.
```bash
domain:make:controller Create a new controller class
domain:make:domain Create a new Domain
domain:make:routes Create a new routes for domain
...
```
## Install
```bash
composer require phpsquad/domain-maker
```
## Usage
### Create new Domain
```bash
php artisan domain:make:domain
```
If this is the first domain the Domains directory will be created under app/Domains along with the specified domain.
```Bash
Domains
└── Media
├── Exceptions
├── Http
│ ├── Controllers
│ │ ├── VimeoController.php
│ │ └── YoutubeController.php
│ ├── Middleware
│ └── Requests
│ └── YoutubeRequest.php
├── Jobs
│ └── YoutubeSync.php
├── Models
│ └── Youtube.php
├── Repositories
│ └── YoutubeRepository.php
├── resources
│ ├── css
│ ├── js
│ └── views
│ └── youtube-home.blade.php
├── routes
│ ├── Media.php
│ ├── Vimeo.php
│ └── Youtube.php
└── Services
```
### Routing
A standard route file is created when you create a domain via the `domain:make:domain` command.
> Routes are discovered automatically via the DomainRouteServiceProvider
To create subsequent route files use:
```bash
domain:make:routes
```
For example, if I have a "Payments" domain, and I'd like to group my Stripe Routes I'd run the command like so:
```bash
domain:make:routes Payments Stripe
```
### Repositories
A repository with standard CRUDs can easily be generate by using the `domain:make:repository`.
```bash
domain:make:repository
```
Using the "Payments" domain again to demonstrate, we can use the command as follows:
```bash
domain:make:repository Payments PaymentRepository Payment
```
### Stubs
Public stubs will be used as a default. If stubs are unpublished, backups are contained in the package.
There are package specific stubs that you may publish to override (i.e., routes.stub)
> If you don't need to make changes to the stubs it's not necessary to publish them.
```bash
php artisan vendor:publish --tag=domain-stubs
```
## Changelog
Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.
## Contributing
Please see [CONTRIBUTING](CONTRIBUTING.md) for details.
## Credits
- [Richard Rohrig](https://github.com/phpsquad)
- [All Contributors](https://github.com/phpsquad/domain-maker/contributors)
## Security
If you discover any security-related issues, please email richard.t.rohrig@gmail.com instead of using the issue tracker.
## License
The MIT License (MIT). Please see [License File](/LICENSE.md) for more information.