lowel / laravel-service-maker
A package for Laravel 9+ that helps generate layered services according to the Interface-Service-Factory pattern using laravel's built-in DI.
Requires
- php: ^8.3
- composer/class-map-generator: *
- illuminate/contracts: ^10.0||^11.0||^12.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^2.9||^3.0
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^10.0.0||^9.0.0||^8.22.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-arch: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/extension-installer: ^1.3||^2.0
- phpstan/phpstan-deprecation-rules: ^1.1||^2.0
- phpstan/phpstan-phpunit: ^1.3||^2.0
- spatie/laravel-ray: ^1.35
This package is auto-updated.
Last update: 2025-07-06 19:40:45 UTC
README
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.,Payment
will createPaymentService
)--s|singleton
: Create the service as a singleton
Example:
php artisan lowel:make:service Payment
This will generate:
App/Services/Payment/PaymentService.php
App/Services/Payment/PaymentServiceInterface.php
App/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.,User
will createUserRepository
)--s|singleton
: Create the repository as a singleton
Example:
php artisan lowel:make:repository User --singleton
This will generate:
App/Repositories/User/UserRepository.php
App/Repositories/User/UserRepositoryInterface.php
App/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.