laravel-service-maker maintained by lowel
Description
A package for Laravel 9+ that helps generate layered services according to the Interface-Service-Factory pattern using laravel's built-in DI.
Author
Last update
2026/04/27 00:29
(dev-main)
License
Downloads
59
Laravel Service/Repository Generator Package
This Laravel package provides Artisan commands to quickly generate service and repository classes with their corresponding interfaces and factories following a standardized structure.
Installation
- Install the package via Composer:
composer require lowel/laravel-service-maker
- The package will automatically register its service provider. If you need to publish the configuration file:
php artisan vendor:publish --provider="Lowel\\LaravelServiceMaker\\LaravelServiceMakerProvider" --tag="config"
Commands
Create a new service
php artisan lowel:make:service {name} {--s|singleton}
Options:
name: The name of the service (e.g.,Paymentwill createPaymentService)--s|singleton: Create the service as a singleton
Example:
php artisan lowel:make:service Payment
This will generate:
App/Services/Payment/PaymentService.phpApp/Services/Payment/PaymentServiceInterface.phpApp/Services/Payment/PaymentServiceFactory.php
Create a new repository
php artisan lowel:make:repository {name} {--s|singleton}
Options:
name: The name of the repository (e.g.,Userwill createUserRepository)--s|singleton: Create the repository as a singleton
Example:
php artisan lowel:make:repository User --singleton
This will generate:
App/Repositories/User/UserRepository.phpApp/Repositories/User/UserRepositoryInterface.phpApp/Repositories/User/UserRepositoryFactory.php
File Structure
The package follows this directory structure:
app/
├── Repositories/
│ ├── {RepositoryName}/
│ │ ├── {RepositoryName}Repository.php
│ │ ├── {RepositoryName}RepositoryInterface.php
│ │ └── {RepositoryName}RepositoryFactory.php
└── Services/
├── {ServiceName}/
│ ├── {ServiceName}Service.php
│ ├── {ServiceName}ServiceInterface.php
│ └── {ServiceName}ServiceFactory.php
Usage
After generating the classes, you can use them through Laravel's dependency injection:
use App\Services\Payment\PaymentServiceInterface;
use App\Repositories\User\UserRepositoryInterface;
use Illuminate\Support\Facades\App;
// Using app() helper
$service = app(PaymentServiceInterface::class);
$repository = app(UserRepositoryInterface::class);
// Using App facade
$service = App::make(PaymentServiceInterface::class);
// Using constructor injection
public function __construct(
PaymentServiceInterface $paymentService,
UserRepositoryInterface $userRepository
) {
// ...
}
The package automatically registers the interfaces in Laravel's container, binding them to their concrete implementations.
Configuration
You can customize the generation behavior by publishing and modifying the package configuration file:
php artisan vendor:publish --provider="Lowel\\LaravelServiceMaker\\LaravelServiceMakerProvider" --tag="config"
This will create config/service-maker.php where you can configure:
- Base paths
- Class mapping
- Formatting
Requirements
- PHP 8.3+
- Laravel 9+
License
This package is open-sourced software licensed under the MIT license.