labrodev / laravel-filter-components
用于扩展CRUD操作中过滤器功能的包(使用Spatie Laravel Query Builder)
Requires
- php: >=8.1
- illuminate/contracts: ^10.0
- spatie/laravel-package-tools: ^1.14.0
- spatie/laravel-query-builder: >=5.6.0
- spatie/query-string: >=1.0
Requires (Dev)
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.8
- nunomaduro/larastan: ^2.0.1
- orchestra/testbench: ^8.8
- pestphp/pest: ^2.20
- pestphp/pest-plugin-arch: ^2.0
- pestphp/pest-plugin-laravel: ^2.0
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.10
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- spatie/laravel-ray: ^1.26
This package is auto-updated.
Last update: 2024-09-30 02:02:56 UTC
README
这是一个Laravel包,用于扩展Laravel项目中过滤功能。如果您有一个项目列表并且使用spatie/laravel-query-builder进行过滤,这个包可能对您很有用。
本包基于spatie/laravel-query-builder用例开发。我们感谢Spatie激发我们的灵感,分享宝贵的经验,并提供出色的Laravel包,我们不仅广泛使用,而且真诚推荐。
QueryBuilder类
在这个包中,您可以找到一些自定义的QueryBuilder部分,用于扩展过滤逻辑。
DateRangeFilter
QueryBuilder类,通过WhereBetween实现按日期范围过滤的逻辑。
IsNotNullFilter
QueryBuilder类,通过whereNull或whereNotNull实现过滤逻辑,根据输入值。可以在我们只需要根据某些标志过滤时使用,这些标志背后有逻辑(例如:有未付款发票 - 是/否)。
WhereInFilter
QueryBuilder类,通过whereIn使用给定的值数组实现过滤逻辑(适用于多选过滤器)。
视图组件
此外,您还可以在这个包中找到根据类型和逻辑渲染的过滤组件。
您可以从这个包中公开供应商视图,以实现过滤组件blade模板的自定义样式,并将其调整到您的布局和主题。
默认情况下,blade中的过滤器组件使用Bootstrap类。
布尔过滤器
视图组件,用于渲染带有选择选项“否”,“是”(或组件属性中定义的自定义选项)的过滤器。
自定义选择过滤器
视图组件,用于渲染带有自定义选择选项的过滤器。
日期范围过滤器
视图组件,用于渲染带有两个日期输入作为日期范围的过滤器(开始日期和结束日期)。
输入过滤器
视图组件,用于渲染带有文本输入的过滤器。
多选字段
视图组件,用于渲染来自给定Eloquent模型的多个选择选项的过滤器。
选择字段
视图组件,用于渲染来自给定Eloquent模型的选择选项的过滤器。
链接
视图组件,用于渲染排序字段。
安装
您可以通过composer安装此包
composer require labrodev/laravel-filter-components
可选,您可以发布视图以将其应用于布局。
php artisan vendor:publish --tag=filter-components-views
可选,您可以发布视图组件以扩展您需要的逻辑。
php artisan vendor:publish --tag=filter-components-components
用法
QueryBuilder类
假设您熟悉Spatie\QueryBuilder并且已经使用Spatie\QueryBuilder实现了过滤逻辑。
您可以通过使用此包中的QueryBuilder类扩展用法:DateRangeFilter、WhereInFilter、IsNotNullFilter。
use Illuminate\Http\Request; use Labrodev\Filters\QueryBuilder\DateRangeFilter; use Labrodev\Filters\QueryBuilder\WhereInFilter; use Labrodev\Filters\QueryBuilder\IsNotNullFilter; use Spatie\QueryBuilder\AllowedFilter; use Spatie\QueryBuilder\QueryBuilder; class YourQuery extends QueryBuilder { public function __construct(Request $request) { $query = YourModel::query(); parent::__construct($query, $request); //DateRangeFilter $this->allowedFilters([ AllowedFilter::custom('filter_name', new DateRangeFilter(), 'table_column') ]); //DateRangeFilter $this->allowedFilters([ AllowedFilter::custom('filter_name', new WhereInFilter(), 'table_column') ]); //IsNotNullFilter $this->allowedFilters([ AllowedFilter::custom('filter_name', new IsNotNullFilter(), 'table_column') ]); } }
视图组件
假设您想在CRUD列表中实现过滤。
可能有一个过滤块。假设有一个过滤表单。
<form action="your filter routing" method="GET"> <!-- and here could be components from this package --> <button type="submit"></button> </form>
布尔过滤器
<x-filter-boolean-field field="filter[{{ $filterField }}]" name="{{ __('Filter label') }}" options="{{__('Your option 1') }},{{ __('Your option 2')}}"> </x-filter-boolean-field>
- field - 这是搜索请求中的查询参数
- name - 这是此过滤器的标签
- options - 选择框中的选项;如果没有提供,则默认为“否”,“是”选项
自定义选择过滤器
<x-filter-custom-select-field> field="filter[{{ $filterField }}]" name="{{ __('Filter label') }}" options="{{__('Your option 1') }},{{ __('Your option 2')}}"> </x-filter-custom-select-field>
- field - 这是搜索请求中的查询参数
- name - 这是此过滤器的标签
- 选项 - 将在下拉框中显示的选项
日期范围过滤器
<x-filter-date-range-field> field="filter[{{ $filterField }}]" name="{{ __('Filter label') }}"> </x-filter-date-range-field>
- field - 这是搜索请求中的查询参数
- name - 这是此过滤器的标签
输入过滤器
<x-filter-field> field="filter[{{ $filterField }}]" name="{{ __('Filter label') }}"> </x-filter-field>
- field - 这是搜索请求中的查询参数
- name - 这是此过滤器的标签
多选筛选器
<x-filter-multiple-select-field field="filter[{{$filterField}}]" name="{{ __('Filter label') }}" class="{{ $eloquentModelClass }}" value="{{ $eloquentModelProperty}}"> </x-filter-multiple-select-field>
- field - 这是搜索请求中的查询参数
- name - 这是此过滤器的标签
- class - 从该Eloquent模型类中获取选项值的类。例如,如果类是 App\Models\UserGroup,则将渲染
user_groups
表中的所有用户组作为选项 - value - 显示为选项的属性。例如,如果值为
name
,则使用user_groups
表中的name
列作为选项;如果您想将两个列分割以作为选项,请在 value 中用逗号分隔:'column1,column2'
选择筛选器
<x-filter-select-field field="filter[{{$filterField}}]" name="{{ __('Filter label') }}" class="{{ $eloquentModelClass }}" value="{{ $eloquentModelProperty}}"> </x-filter-select-field>
- field - 这是搜索请求中的查询参数
- name - 这是此过滤器的标签
- class - 从该Eloquent模型类中获取选项值的类。例如,如果类是 App\Models\UserGroup,则将渲染
user_groups
表中的所有用户组作为选项 - value - 显示为选项的属性。例如,如果值为
name
,则使用user_groups
表中的name
列作为选项;如果您想将两个列分割以作为选项,请在 value 中用逗号分隔:'column1,column2'
链接
<x-sort-link name="{{ $fieldToSort }}"> </x-sort-link>
- name - 排序字段
测试
composer test
PhpStan 检查
composer analyse
变更日志
请参阅 变更日志 了解最近更改的详细信息。
致谢
许可证
MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。