fernandozueet/service-laravel

一个帮助分离控制层业务规则的库。使控制层更加精简。

1.5.2 2019-07-02 14:41 UTC

This package is auto-updated.

Last update: 2024-09-29 05:21:44 UTC


README

一个帮助分离控制层业务规则的库。使控制层更加精简。

需求

  • PHP 7.0 或更高版本;
  • Laravel 5.5 或更高版本;

安装

composer require fernandozueet/service-laravel

注册命令

文件: app/Console/Kernel.php

protected $commands = [
    \FzService\Console\ServiceCommand::class,
    \FzService\Console\ResourceCommand::class,
];

创建资源类

资源类被覆盖,并从返回的字段中获得新的自定义功能。

无需输入资源前缀。

php artisan fzservice:make:resource User

已创建类

<?php

namespace App\Http\Resources;

use FzService\JsonResource;

class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
    	$return = parent::toArray($request);

    	return $this->mountFields($return);
    }
}

如何使用过滤器?

\App\Resources\UserResource::collection(\App\User::paginate(), ['fields' => 'user' => 'id,name']);

创建服务类

无需输入服务前缀。

php artisan fzservice:make:service User

已创建类

<?php

namespace App\Services;

use FzService\Service;
use App\Models\User;
use App\Http\Resources\UserResource;

class UserService extends Service
{
    /**
    * Model class
    *
    * @var \App\Models\User
    */
    protected $modelClass = User::class;

    /**
     * Read all rows
     *
     * @param array $params
     * @param boolean $collection
     * @return array|stdClass
     */
    public function readAll(array $params = [], bool $collection = true)
    {
    	return $this->mountRead(function() use ($params) {

            //

        }, $params, $collection ? UserResource::class : null, []);
    }

}

服务读取

辅助构建eloquent查询的方法。

<?php

namespace App\Services;

use FzService\Service;
use App\Models\User;
use App\Http\Resources\UserResource;

class UserService extends Service
{
    /**
    * Model class
    *
    * @var \App\Models\User
    */
    protected $modelClass = User::class;

    /**
     * Read all rows
     *
     * @param array $params
     * @param boolean $collection
     * @return array|stdClass
     */
    public function readAll(array $params = [], bool $collection = true)
    {
    	return $this->mountRead(function() use ($params) {

            //wheres
            if(!empty($params['id'])) {
                $this->modelClass = $this->modelClass->where('id', $params['id']);
            }
            if(!empty($params['name'])) {
                $this->modelClass = $this->modelClass->where('name', $params['name']);
            }

            //

        }, $params, $collection ? UserResource::class : null, []);
    }

}

示例 1

在第1页按名称搜索

//Service
$userService = \App\Services\UserService();
$result = $userService->readAll(['name' => "User test", 'page' => 1]);

//Code equal to:
$result = \App\Resources\UserResource::collection(\App\User::where('name',$params['name'])->paginate());

示例 2

按名称搜索(无分页)

//Service
$userService = \App\Services\UserService();
$result = $userService->readAll(['name' => "User test"]);

//Code equal to:
$result = \App\Resources\UserResource::collection(\App\User::where('name',$params['name'])->get());

示例 3

按名称和按姓名和last_name升序排序

//Service
$userService = \App\Services\UserService();
$result = $userService->readAll(['name' => "User test", 'sort' => 'name,last_name']);

//Code equal to:
$result = \App\Resources\UserResource::collection(\App\User::where('name',$params['name'])->orderBy('name','ASC')->orderBy('last_name','ASC')->get());

示例 4

按名称搜索并按名称降序排序

//Service
$userService = \App\Services\UserService();
$result = $userService->readAll(['name' => "User test", 'sort' => '-name']);

//Code equal to:
$result = \App\Resources\UserResource::collection(\App\User::where('name',$params['name'])->orderBy('name','DESC')->get());

示例 5

在第1页按名称搜索并选择返回字段

//Service
$userService = \App\Services\UserService();
$result = $userService->readAll(['name' => "User test", 'page' => 1, 'fields' => [ 'user' => 'id,name' ] ]);

//Code equal to: (this option does not exist in the default laravel resource class)
$result = \App\Resources\UserResource::collection(\App\User::where('name',$params['name'])->paginate());

禁用默认方法

默认方法:paginate和sort

public function readAll(array $params = [], bool $collection = true)
{
    return $this->mountRead(function() use ($params) {

        //

    }, $params, $collection ? UserResource::class : null, ['paginate','sort']);
}

禁用资源类

要禁用资源类,只需输入null值。

public function readAll(array $params = [], bool $collection = true)
{
    return $this->mountRead(function() use ($params) {

        //

    }, $params, null, []);
}

服务插入

用于插入数据eloquent的方法。

insert(array $values, array $exclude = [], array $include = [])

create(array $values, array $exclude = [], array $include = [])

示例 1

插入并返回输入数据的数组

//Service
$userService = \App\Services\UserService();
$result = $userService->insert(['name' => "User test", "last_name" => 'other name']);

//Insert through the Create method (declare fields to insert into the model)
$result = $userService->create(['name' => "User test", "last_name" => 'other name']);

//Code equal to:
$model = new \App\User();
$model->name = 'User test';
$model->last_name = 'other name';
$model->save();
$result = $model->toArray();

示例 2

插入并返回输入数据的数组。

从返回的数据中删除或添加字段。

//Service - exclude return fields
$userService = \App\Services\UserService();
$result = $userService->insert(['name' => "User test", "last_name" => 'other name'], false, ['id','name']);

//Service - visible return fields
$userService = \App\Services\UserService();
$result = $userService->insert(['name' => "User test", "last_name" => 'other name'], false, [], ['id','name']);

//Code equal to:
$model = new \App\User();
$model->name = 'User test';
$model->last_name = 'other name';
$model->save();
$result = $model->makeHidden(['id','name'])->toArray(); //exclude return fields
$result = $model->makeVisible(['id','name'])->toArray(); //visible return fields

服务更新

用于更新数据eloquent的方法。

updateById(int $id, array $values, array $exclude = [], array $include = [])

示例

//Service
$userService = \App\Services\UserService();
$result = $userService->updateById(1, ['name' => "New name"]);

//Code equal to:
$model = \App\User::where('id', 1);
$model->name = 'New name';
$model->save();
$result = $model->toArray();

服务删除

用于删除数据eloquent的方法。

deleteById(int $id)

示例

//Service
$userService = \App\Services\UserService();
$result = $userService->deleteById(1);

//Code equal to:
$result = \App\User::where('id', 1)->forceDelete();

服务软删除

用于软删除数据eloquent的方法。

softDeleteById(int $id)

示例

//Service
$userService = \App\Services\UserService();
$result = $userService->softDeleteById(1);

//Code equal to:
$result = \App\User::where('id', 1)->delete();

有用方法

文件: \FzService\Service.php

//Model
$this->modelClass;

//Create eloquent model instance
$this->newQuery();

//Set value field (array $params)
$this->setValuesModel(['name' => 'User test']);

//Save model (array $exclude = [], array $include = [], bool $returnArray = true)
$this->saveModel();

//Filter model (filtersModel(array $exclude = [], array $include = [], bool $returnArray = true))
$this->filtersModel();

贡献

有关详细信息,请参阅CONTRIBUTING

安全

如果您发现与安全相关的问题,请通过电子邮件fernandozueet@hotmail.com联系,而不是使用问题跟踪器。

鸣谢

许可证

该软件包采用MIT许可证。有关更多信息,请参阅许可证文件