media24si / utilities
Media24 Laravel 工具库
v2.0.5
2024-03-20 09:34 UTC
Requires
- php: ^7.3|^8.0
- laravel/framework: ^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- mockery/mockery: ^1.3.1
- phpunit/phpunit: ^8.5
- squizlabs/php_codesniffer: *
README
这是一个我们几乎在所有项目中使用的工具集合。
兼容性
使用 1.* 版本用于 Laravel 5.* / 6.*
安装
composer require media24si/utilities
工具列表
- 工具
- 作用域
- 规则
工具
ApiPaginator
扩展 Laravel LengthAwarePaginator,具有自定义转换响应。
示例用法
$model->where('foo', 'bar')->orderBy('foo', 'desc'); $results = ApiPaginator::create($model, 15);
响应示例(调用返回的 paginator 对象的 toArray() 方法)
[ 'data' => ['item3', 'item4'], 'pagination' => [ 'total' => 6, 'per_page' => 2, 'current_page' => 2, 'last_page' => 3, 'next_page_url' => '/?page=3', 'prev_page_url' => '/?page=1', 'from' => 3, 'to' => 4 ] ]
排序器
一个用于验证和具有作用域的特质的规则。主要用于在 API 端点中实现易于排序。
示例用法
排序是通过使用 'sort' 查询字符串参数(例如)确定的。该参数的值是排序键的逗号分隔列表。默认排序方向是升序,但可以通过在键前加 "-" 可选地更改为降序。
- /api/posts?sort=views
- /api/posts?sort=-views
- /api/posts?sort=comments,-views
// Model class Post extends Model { use \Media24si\Utilities\Scopes\Sorter; } // Controller action public function index(Request $request) { $request->validate(['sort' => new \Media24si\Utilities\Rules\Sorter(['views', 'comments'])]); $posts = \App\Post::sorter($request->input('sort', ''))->get(); }
作用域
WhereWhen
WhereWhen 作用域特质是对 when 方法的扩展
$model->whereWhen('foo'); // same as $model->when(request('foo'), function($query) { return $query->where('foo', request('foo')); }); $model->whereWhen('foo', 'bar'); // same as $model->when(request('bar'), function($query) { return $query->where('foo', request('bar')); }); $model->whereWhen('foo', 'bar', '<'); // same as $model->when(request('bar'), function($query) { return $query->where('foo', '<', request('bar')); }); $model->whereWhen('foo', 'bar', null, new Request(['bar' => 'foo'])); // same as $model->when($request->input('bar'), function($query) { return $query->where('foo', $request->input('bar')); });
ApiPaginate
可以使用 apiPaginate 作用域特质在构建器实例上调用 ApiPaginator
$model->where('foo', 'bar')->orderBy('foo', 'desc')->apiPaginate(15);
与之前相同
$model->where('foo', 'bar')->orderBy('foo', 'desc'); $model = ApiPaginator::create($model, 15);
特质使用
要使用此作用域在您的模型中,只需像包含其他任何特质一样包含它。
class MyModel extends \Illuminate\Database\Eloquent\Model { use \Media24si\Utilities\Scopes\ApiPaginate; }
规则
CsvIn
一个验证发送的 CSV 值字符串是否存在于给定值集中的规则。所有发送的 CSV 值都必须在提供的值集中存在。
有效
- /api/orders?source=android,ios
$request->validate([ 'source' => new Media24si\Utilities\Rules\CsvIn(['web', 'android', 'ios', 'winphone']) ]);
无效
- /api/orders?source=android,ios,otherval
$request->validate([ 'source' => new Media24si\Utilities\Rules\CsvIn(['web', 'android', 'ios', 'winphone']) ]);