media24si / utilities

Media24 Laravel 工具库

v2.0.5 2024-03-20 09:34 UTC

This package is auto-updated.

Last update: 2024-09-20 10:29:19 UTC


README

这是一个我们几乎在所有项目中使用的工具集合。

Build Status

兼容性

使用 1.* 版本用于 Laravel 5.* / 6.*

安装

composer require media24si/utilities

工具列表

  1. 工具
    1. Api Paginator
    2. 排序器
  2. 作用域
    1. WhereWhen
    2. ApiPaginate
  3. 规则
    1. CsvIn

工具

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'])
]);