fernandozueet / service-laravel
一个帮助分离控制层业务规则的库。使控制层更加精简。
Requires
- php: >=7.0.0
Requires (Dev)
- phpunit/dbunit: >=1.2
- phpunit/phpunit: 5.5.*
- phpunit/phpunit-selenium: >=1.2
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许可证。有关更多信息,请参阅许可证文件