ahmmmmad11 / filters
一个包装包,用于在Laravel应用程序中简化过滤器创建,基于spatie查询构建器包
Requires
- php: ^8.2
- illuminate/contracts: ^10.0||^11.0
- spatie/laravel-package-tools: ^1.16
- spatie/laravel-query-builder: ^5.0
Requires (Dev)
- larastan/larastan: ^2.9
- laravel/pint: ^1.14
- nunomaduro/collision: ^7.10.0||^8.1.1
- orchestra/testbench: ^8.22.0||^9.0.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
- phpstan/extension-installer: ^1.3
- phpstan/phpstan-deprecation-rules: ^1.1
- phpstan/phpstan-phpunit: ^1.3
- spatie/laravel-ray: ^1.35
This package is not auto-updated.
Last update: 2024-09-29 20:38:20 UTC
README
安装
您可以通过composer安装此包
composer require ahmmmmad11/filters
安装后,您可以使用以下命令发布配置文件
php artisan vendor:publish --tag="filters-config"
这是已发布配置文件的内容
return [ /* |-------------------------------------------------------------------------- | Filters Path |-------------------------------------------------------------------------- | | This value is the path where your filter class will be created. | */ 'path' => '\Http\Filters', /* |-------------------------------------------------------------------------- | pagination rows |-------------------------------------------------------------------------- | | The `per_page` value indicates the default pagination size. | If the 'per_page' argument is not provided or there is no | paginate query in the request, this value will be used. | */ 'per_page' => 100, ];
用法
创建您的第一个过滤器
php artisan filter:make UsersFilter --model=User
这将在“app/Http/Filters”目录中生成一个UsersFilter
类。然后您可以根据应用程序的需求进行自定义。
<?php namespace App\Http\Filters; use Ahmmmmad11\Filters\Filter; use App\Models\User; use Spatie\QueryBuilder\QueryBuilder; class UsersFilter extends Filter { public function filter(): Filter { $this->data = QueryBuilder::for(User::class) ->allowedFilters( ["id","name","email","email_verified_at","created_at","updated_at"] ); return $this; } }
当然!以下是您的指令的重新表述版本
如果您遵循正确的命名约定,则可以省略--model
选项。例如,如果您有一个User
模型,您可以使用以下简化的命令
php artisan filter:make UsersFilter
在这种情况下,由于您使用了模型的复数形式(User
变为“Users”),或者如果您更喜欢单数形式(UserFilter),过滤器命令将自动将其与User模型关联。
请注意,此规则不适用于组合模型名称,如
UserProduct
。在这种情况下,请显式指定模型,使用--model=UserProduct
选项或简短形式-m"UserProduct"
。
现在您可以通过在控制器中注入UserFilter
来使用过滤器
... use App\Http\Filters\UsersFilter; class UserController extends Controller { /** * Display a listing of the resource. */ public function index(UsersFilter $filter) { return $filter->get(); } }
或者您可能想返回分页数据
... public function index(UsersFilter $filter) { return $filter->paginate(30); }
如果您想从客户端分配分页表单的大小,可以通过将分页参数留空来实现
$filter->paginate(); // https://example.com/users?per_page=10
如果
paginate
方法的rows
参数留空且请求查询中没有?paginate
,则将使用filters.php
配置中的默认行大小。
扩展Eloquent方法
您可以通过向execute
方法传递callback
直接从您的方法中自定义查询。
// UsersController public function index(UsersFilter $filter) { return $filter->execute(function ($query) { $query->where('status', 'active'); })->get(); }
在
execute
回调函数中,您可以使用所有Eloquent方法。
包含关系
要包含模型关系,请向过滤器创建命令添加选项--relations
。
php artisan filter:make UsersFilter --relations
或简短形式
php artisan filter:make UsersFilter -r
这将生成
//UserFilter Class public function filter(): Filter { $this->data = QueryBuilder::for(User::class) ->allowedFilters( [...filters] ) ->allowedIncludes( [...relations] ); return $this; }
有关更多详细信息,请参阅Spatie Laravel-query-builder
测试
composer test
变更日志
请参阅CHANGELOG以获取有关最近更改的更多信息。
贡献
请参阅CONTRIBUTING以获取详细信息。
安全漏洞
请查阅我们如何报告安全漏洞的安全策略。
鸣谢
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。