alterindonesia/service-pattern
Composer 安装命令:
composer require alterindonesia/service-pattern
包简介
Core service eloquent
README 文档
README
This package provide a service pattern for Laravel application. This package use the default concept of MVC but with additional Service Layer. We not change default logic of Laravel feature like Request, Resource, etc. Here the layer of this package:
- Request comes from Route to Controller via FormRequest Laravel.
- In controller, there is validation based on FormRequest instance.
- After validation succeed, controller call Service Layer via Laravel Service Provider binding feature.
- Service Layer will process the business logic and return the result to controller.
- Controller will return the result to client via Resource.
- Resource will format the result to client.
Installation
composer require alterindonesia/service-pattern
Usage
- Update your Controller.php in app/Http/Controllers folder.
<?php namespace App\Http\Controllers; use Alterindonesia\ServicePattern\Controllers\BaseController; abstract class Controller extends BaseController { }
- Your controller should be like:
<?php namespace App\Http\Controllers; use Alterindonesia\ServicePattern\Contracts\IServiceEloquent; use App\Http\Requests\TestRequest; use App\Http\Resources\TestResource; class TestController extends Controller { public function __construct( IServiceEloquent $service, string $request = TestRequest::class, string $response = TestResource::class ) { parent::__construct($service, $request, $response); } }
you can change the request and response based on your need.
- Create your service in app/Services folder.
- Create Service via artisan command:
php artisan make:service TestService --model=Test
- Your service should be like:
<?php namespace App\Services; use Alterindonesia\ServicePattern\ServiceEloquents\BaseServiceEloquent; use App\Models\Test; class TestServiceEloquent extends BaseServiceEloquent { public function __construct( Test $model ) { parent::__construct($model); } }
- It will auto generate for CRUD operation, you can override the method based on your need.
- Your route will be like:
<?php use Illuminate\Support\Facades\Route; Route::get('/test','App\Http\Controllers\TestController@index'); Route::post('/test','App\Http\Controllers\TestController@store'); Route::get('/test/{id}','App\Http\Controllers\TestController@show'); Route::put('/test/{id}','App\Http\Controllers\TestController@update'); Route::delete('/test/{id}','App\Http\Controllers\TestController@destroy');
- Now, bind your service in AppServiceProvider.php
<?php namespace App\Providers; use Alterindonesia\ServicePattern\Contracts\IServiceEloquent; use App\Http\Controllers\TestController; use App\Services\TestServiceEloquent; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Register any application services. */ public function register(): void { // } /** * Bootstrap any application services. */ public function boot(): void { $this->app->when(TestController::class) ->needs(IServiceEloquent::class) ->give(TestServiceEloquent::class); } }
- Done, now you can use this package in your Laravel application.
FAQ
- why you not use RepositoryLayer?
- personally, I think Repository Layer is not necessary because Laravel Eloquent is already powerful.
- but, you can create your own Repository Layer in Service Layer if you want.
Next Feature
- Add Service Layer for Query Builder
- Add Yajra Datatables Service Layer
- Add Service Layer for Import/Export
- we think about it
alterindonesia/service-pattern 适用场景与选型建议
alterindonesia/service-pattern 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 551 次下载、GitHub Stars 达 0, 最近一次更新时间为 2024 年 03 月 21 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 alterindonesia/service-pattern 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 alterindonesia/service-pattern 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 551
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 9
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-03-21