cocept / 过滤器
允许您在 Symfony 中使用一个设置 URL 参数的部件来过滤 Doctrine 查询。与 KNP Paginator 一起工作良好。
Requires
- php: >=5.3.3
- symfony/assetic-bundle: ^2.7
- symfony/framework-bundle: ~2.3|~2.8
- twig/twig: ~1.12|~2
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
贡献
此包正在生产中使用,并将继续维护。如果您希望提交拉取请求,它将被及时考虑并合并。