forrestedw/query-url-builder

一个用于简化操作前端查询URL的单类包

1.0.0 2020-05-08 13:45 UTC

This package is auto-updated.

Last update: 2024-09-28 00:18:34 UTC


README

Packagist Version License: MIT Test

此包使使用 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

组合各种 sortfilter 选项

// 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() 如下。

排序

以下示例将创建一个循环通过三个排序状态的链接

  1. A-Z排序
  2. Z-A排序
  3. 未排序。
@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文本显示用户将看到哪种排序。链接将用户带到下一个排序状态。

筛选

对于布尔值筛选,采用类似的方法,并循环三个状态

  1. 仅显示 true
  2. 仅显示 false
  3. 显示所有
@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"/>

在幕后,处理 sortfilter 属性以将其转换为对应属性的snake case。例如,排序示例显示 First Name(正好传递)但按 first_name 排序。