dogmatic69 / cakephp-sifter
CakePHP插件,用于过滤和搜索模型数据
Requires
This package is not auto-updated.
Last update: 2024-09-28 16:09:12 UTC
README
Sifter
Sifter 是一个 CakePHP 插件,使搜索和过滤数据变得简单。它还可以配置以更改搜索方式。
所有配置都在模型中完成,这意味着不需要在表单、重定向或任何其他代码中乱搞。组件会与请求数据交互并根据请求中找到的数据执行各种操作。
主要功能
- 基于模型/行为配置自动生成表单。(使用包含的元素)
- 字段类型反射以获得最佳输入类型
- 所有文本输入的自动 AJAX 自动完成(需要包含 jQuery)
- 自动选择下拉列表用于外键字段(包括深度关系,可自定义查找方法设置)
- 自动修改分页,以便可以以最小的代码更改将其插入,也可以与普通查找或手动使用
- Post -> Redirect -> Get,因此搜索是可索引的,可链接的
- 安全 - 只搜索配置的动作中的配置字段,额外的字段将被简单地忽略
- 深度关系搜索,特别是使用自定义查找进行搜索时,可以控制所有的连接和额外的搜索要求
插件由以下主要部分组成
行为
行为执行了许多操作
- 根据字段模式确定表单输入
- 在模型中查找并调用自定义查找方法以获取数据
- 配置要搜索的内容和位置
组件
- 捕获请求并执行 POST -> GET 重定向或获取 AJAX 自动完成的数据
- 获取并设置数据以填充搜索表单中的选择视图变量
- 过滤 GET 参数并修改/返回查找条件
助手/元素
这是 Sifter 插件的前端。这是完全可选的,但应该可以覆盖大多数使用情况。如果您不打算使用包含的元素来构建搜索表单,至少应该看看它,以了解使搜索工作所需的要素。
- 元素:基于配置的模型和设置创建默认搜索表单
- 助手:将行为设置转换为表单输入
安装
使用 git 安装
git clone https://github.com/dogmatic69/cakephp-sifter Plugin/Sifter
作为子模块安装
git submodule add https://github.com/dogmatic69/cakephp-sifter Plugin/Sifter
使用 composer 安装(即将推出)
composer.phar require dogmatic69/cakephp-sifter
基本用法
将行为附加到您想要筛选的模型。这可以在 actsAs 属性中完成,也可以动态完成,有关更多详细信息,请参阅 CakePHP 文档。
class MyModel extends AppModel {
public $actsAs = array(
... other behaviors
'Sifter.Sifter' => array(
'fields' => array(
'MyModel.field_1' => array(
'input' => array(
'placeholder' => 'Customize your form with ease',
)
),
'MyOtherModel.field_2',
'field_3', // <- will automatically use the current model alias
)
),
);
// code
}
一旦附加到模型,您需要将组件附加到控制器,以便它可以捕获和处理 sifter 请求。有关具体信息,请参阅 CakePHP 文档。
class MyController extends AppController {
public $components = array(
...,
'Sifter.Sifter',
);
// code
}
最后,您需要一个表单,以便用户可以输入搜索要求。有一个包含的元素可以基于配置的输入构建通用搜索表单。或者,您可以使用表单助手构建自己的表单。
echo $this->element('Sifter.sift');
这就完成了,现在当您访问页面时应该能看到一个搜索表单。在表单中提交数据将执行PRG到包含所有参数的URL。如果您使用分页,这些参数已包含在PaginatorComponent::$settings
属性中。如果您在页面上使用常规查找,可以使用SifterComponent::sift()
方法获取查询条件。
在控制器方法中
$conditions = $this->Sifter->sift($this);
pr($conditions);
// output
array(
'conditions' => array(
'MyModel.field_1' => 'foobar',
'MyOtherModel.field_2' => 'baz',
...
),
'contain' => array(
'MyOtherModel',
)
)
贡献
在github.com/dogmatic69/cakephp-sifter提交错误/补丁