alterindonesia/service-pattern 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

alterindonesia/service-pattern

最新稳定版本:v0.1.7

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:

  1. Request comes from Route to Controller via FormRequest Laravel.
  2. In controller, there is validation based on FormRequest instance.
  3. After validation succeed, controller call Service Layer via Laravel Service Provider binding feature.
  4. Service Layer will process the business logic and return the result to controller.
  5. Controller will return the result to client via Resource.
  6. Resource will format the result to client.

Installation

composer require alterindonesia/service-pattern

Usage

  1. Update your Controller.php in app/Http/Controllers folder.
<?php

namespace App\Http\Controllers;

use Alterindonesia\ServicePattern\Controllers\BaseController;

abstract class Controller extends BaseController
{

}
  1. 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.

  1. Create your service in app/Services folder.
  2. Create Service via artisan command:
php artisan make:service TestService --model=Test
  1. 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);
    }

}
  1. It will auto generate for CRUD operation, you can override the method based on your need.
  2. 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');
  1. 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);

    }
}
  1. 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

统计信息

  • 总下载量: 537
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2024-03-21

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固