alterindonesia / service-pattern
核心服务eloquent
v0.0.45
2024-08-03 15:21 UTC
Requires
- dev-main
- v0.0.45
- v0.0.44
- v0.0.43
- v0.0.42
- v0.0.41
- v0.0.40
- v0.0.39
- v0.0.38
- v0.0.37
- v0.0.36
- v0.0.35
- v0.0.34
- v0.0.33
- v0.0.32
- v0.0.31
- v0.0.30
- v0.0.29
- v0.0.28
- v0.0.27
- v0.0.26
- v0.0.25
- v0.0.24
- v0.0.23
- v0.0.22
- v0.0.21
- v0.0.20
- v0.0.19
- v0.0.18
- v0.0.17
- v0.0.16
- v0.0.15
- v0.0.14
- v0.0.13
- v0.0.12
- v0.0.11
- v0.0.10
- v0.0.9
- v0.0.8
- v0.0.7
- v0.0.6
- v0.0.5
- v0.0.4
- v0.0.3
- v0.0.2
- v0.0.1
This package is auto-updated.
Last update: 2024-09-03 15:36:08 UTC
README
此包为Laravel应用程序提供服务模式。此包使用MVC的默认概念,但增加了服务层。我们不会更改Laravel功能(如请求、资源等)的默认逻辑。此包的层次如下:
- 请求从路由通过FormRequest Laravel发送到控制器。
- 在控制器中,根据FormRequest实例进行验证。
- 验证成功后,控制器通过Laravel Service Provider的绑定功能调用服务层。
- 服务层将处理业务逻辑并将结果返回给控制器。
- 控制器将通过资源将结果返回给客户端。
- 资源将格式化结果发送给客户端。
安装
composer require alterindonesia/service-pattern
使用
- 更新app/Http/Controllers文件夹中的Controller.php文件。
<?php namespace App\Http\Controllers; use Alterindonesia\ServicePattern\Controllers\BaseController; abstract class Controller extends BaseController { }
- 您的控制器应该如下所示
<?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); } }
您可以根据需要更改请求和响应。
- 在app/Services文件夹中创建您的服务。
- 通过 artisan 命令创建服务
php artisan make:service TestService --model=Test
- 您的服务应该如下所示
<?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); } }
- 它将自动生成CRUD操作,您可以根据需要覆盖方法。
- 您的路由应该如下所示
<?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');
- 现在,在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); } }
- 完成,现在您可以在Laravel应用程序中使用此包了。
常见问题解答
- 为什么你没有使用RepositoryLayer?
- 我个人认为,Repository Layer不是必要的,因为Laravel Eloquent已经非常强大。
- 但是,如果您想的话,您可以在服务层中创建自己的Repository Layer。
下一个功能
- 为查询构建器添加服务层
- 添加Yajra Datatables服务层
- 为导入/导出添加服务层
- 我们正在考虑