forrestedw / query-url-builder
一个用于简化操作前端查询URL的单类包
1.0.0
2020-05-08 13:45 UTC
README
此包使使用 spatie/laravel-query-builder 的前端链接变得简单。此包对后端非常有用,前端不在此项目的范围内。创建前端链接可能很冗长。此包使操作变得简单。
安装
$ composer require forrestedw/query-url-builder
基本用法
为了最大便利,请从外观使用。
use Forrestedw\QueryUrlBuilder\QueryUrl;
排序
设置排序
QueryUrl::sortBy('name')->build(); // http://example.test/?sort=name, ie name ASC QueryUrl::sortBy('-name')->build(); // http://example.test/?sort=-name, ie name DESC
访问排序
// On page http://example.test/?sort=name QueryUrl::sort === 'name' // true QueryUrl::sort === '-name' // false
反转排序
// On page http://example.test/?sort=name QueryUrl::reverseSort()->build(); // http://example.test/?sort=-name, ie ASC goes to DESC // On page http://example.test/?sort=-name QueryUrl::reverseSort()->build(); // http://example.test/?sort=name, ie DESC goes to ASC
移除排序
// On page http://example.test/?sort=name QueryUrl::removeSort()->build(); // http://example.test/
筛选
检查是否设置了筛选
// On page http://example.test/?filter[name]=Joe QueryUrl::hasFilter('name') // true QueryUrl::hasFilter('email') // false
设置筛选
QueryUrl::setFilter('active', true)->build() // http://example.test/?filter[active]=1 QueryUrl::setFilter('active', false)->build() // http://example.test/?filter[active]=0 QueryUrl::setFilter('active', true)->setFilter('valid', false)->setFilter('name','John')->build() // returns http://example.test/?filter[active]=1&filter[valid]=0&filter[name]=John
筛选也可以使用关联数组设置
$filters = [ 'active' => false, 'valid' => true, ]; QueryUrl::setFilters($filters)->build() // http://example.test/?filter[active]=0&filter[valid]=1
移除筛选
// On page http://example.test/?filter[active]=1&filter[valid]=0&filter[name]=John QueryUrl::removeFilter('active')->build(); // http://example.test/?&filter[valid]=0&filter[name]=John
组合各种 sort
和 filter
选项
// On page http://example.test/?filter[active]=1&filter[valid]=0&filter[name]=John QueryUrl::add('active', true)->sortBy('-email')->build(); // http://example.test/?&filter[active]=1&sort=-email, ie active users sorted by email DESC
forUrl()
默认情况下,QueryUrl
返回您当前所在的路由的新查询参数
// On page http://example.test/ QueryUrl::setFilter('someFilter',true)->build(); // http://example.test/?filter=[someFilter]=1
如果您需要不同的URL,请使用 forUrl()
。它接受纯文本URL或命名路由
// On page http://example.test/ QueryUrl::forUrl('this/then/that/')->setFilter('someFilter',true)->build(); // http://example.com/this/then/that?filter=[someFilter]=1 QueryUrl::forUrl('project.show', ['project_id' => 1])->setFilter('someFilter',true)->build(); // http://example.test/projects/1?filter=[someFilter]=1
在blade中使用
在blade文件中使用 queryUrl()
如下。
排序
以下示例将创建一个循环通过三个排序状态的链接
- A-Z排序
- Z-A排序
- 未排序。
@if(QueryUrl::getSort() === 'name') <a href="{{ QueryUrl::reserveSort()->build() }}">Name - showing A-Z</a> @elseif(QueryUrl::getSort() === '-name') <a href="{{ QueryUrl::removeSort()->build() }}">Name - showing Z-A</a> @else <a href="{{ QueryUrl::sortBy('name')->build() }}">Name - showing unsorted</a> @endif
URL文本显示用户将看到哪种排序。链接将用户带到下一个排序状态。
筛选
对于布尔值筛选,采用类似的方法,并循环三个状态
- 仅显示
true
- 仅显示
false
- 显示所有
@if(! QueryUrl::hasFilter('active')) <a href="{{ QueryUrl::setFilter('active', true)->build() }}">Active - all</a> @elseif(QueryUrl::filter('active') === true) <a href="{{ QueryUrl::setFilter('active', false)->build() }}">Active</a> // currently showing true only @else <a href="{{ QueryUrl::removeFilter('active')->build() }}">Active</a> // currently showing true only @endif
blade组件
为了方便,可以使用以下内容分别输出上述两个三元组if-else链接
<x-queryUrl-sort sort="First Name"/> <x-queryUrl-bool-filter filter="active"/>
在幕后,处理 sort
或 filter
属性以将其转换为对应属性的snake case。例如,排序示例显示 First Name
(正好传递)但按 first_name
排序。