cocept/过滤器

允许您在 Symfony 中使用一个设置 URL 参数的部件来过滤 Doctrine 查询。与 KNP Paginator 一起工作良好。

维护者

详细信息

github.com/cocept/filter

源代码

问题

安装: 160

依赖项: 0

建议者: 0

安全: 0

星星: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

v1.0.3 2019-11-27 20:21 UTC

This package is auto-updated.

Last update: 2024-08-28 23:39:55 UTC


README

Cocept 过滤器是一个用于 Symfony 和 Doctrine 的包,允许用户使用选择部件过滤数据集。

该包提供服务和部件。该部件显示用户搜索输入或选择框,当更改时,将适当的过滤器选项插入到 URL 中。过滤器服务从 URL 获取过滤器选项,并将 WHERE 子句添加到查询构建器中以过滤结果。

可以应用多个过滤器,也可以指定运算符。此包与 KNP Paginator 一起工作良好。

演示应用程序

您可以使用此 symfony 演示应用程序来查看过滤器包的实际应用。

https://github.com/cocept/filter-test

安装

使用 composer 安装

composer require cocept/filter

加载包

将包添加到您的应用程序内核中

// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new Cocept\Bundle\FilterBundle\CoceptFilterBundle(),
        // ...
    );
}

在控制器中应用过滤器

找到您要过滤的控制器中的索引操作,并添加以下行

$this->get('cocept_filter.filter')->filter($request, $qb, array('name'), array('category'));

第三个参数应该是一个数组,包含用户允许过滤的常规字段(字符串、整数等)。

第四个参数应该是一个数组,包含用户允许过滤的外键字段。

将部件添加到您的 twig 模板中

在您的 twig 模板中,添加以下行

{{ filterWidget('name') }}
{{ filterWidget('category', allCategories) }}

filterWidget 函数的第一个参数是用于过滤的字段。

如果省略第二个参数,用户将看到一个搜索字段,并使用 ilike 运算符。否则,必须提供一个关联数组,用户将看到一个选择框和一个按钮来切换 eq 和 neq 运算符。数组键将用作选项标签,值用作选项值。

因此,如果您想向用户显示类别名称列表,该数组可能如下所示

[
	'Code' => 1,
	'UX' => 2
]

加载 JavaScript

filterWidget twig 扩展使用一个 JavaScript 文件将过滤器选项添加到 URL 参数中。请将以下内容添加到 twig 模板的 head 部分

<head>
	...
	{% javascripts
        	'@CoceptFilterBundle/Resources/public/js/jquery.js'
        	'@CoceptFilterBundle/Resources/public/js/jquery.query-object.js'
        	'@CoceptFilterBundle/Resources/public/js/filter.js'
	%}
		<script src="{{ asset_url }}"></script>
	{% endjavascripts %}
	...
</head>

尝试一下

该部件添加 URL 参数,如 filter_name=someval,其中 name 是列名,someval 是要匹配的值。您还可以添加 operator_name=neq,其中 name 是列,neq 是用于 WHERE 子句的运算符,以下映射如下

  • neq: !=
  • ilike: ilike
  • eq: =

带有过滤器参数的示例 URL 可能是

https://:8000/post/?filter_category=5&operator_category=neq&filter_name=php&operator_name=ilike

贡献

此包正在生产中使用,并将继续维护。如果您希望提交拉取请求,它将被及时考虑并合并。