CakePHP过滤器组件 - 正确使用过滤一段时间

问题描述:

我对CakePHP和MVC的思维方式颇为陌生。CakePHP过滤器组件 - 正确使用过滤一段时间

知道我能够通过Nik Chankov成功使用滤镜组件创建Resultsetfiltering。

我使用它的方式是在我的Controller中调用它,保存条件语句并将它传递给我的Paginator。

现在,我有一列保存'created_at'日期,我想让用户输入开始日期和结束日期并将其传递给过滤器组件。

我试着创建两个输入字段'created_after'和'created_before',并将它们连接到我的控制器中的数组[[created_at] [BETWEEN],因为过滤组件处理'BETWEEN'。不幸的是,如果我将原始值created_before和_after取消设置,那么它们将不会被过滤器组件保存到会话中,如果我没有,我会得到一个SQL错误,因为组件会创建一个语句,包括'created_after'和created_before'这在我的数据库中没有定义。

这样做的正确方法是什么?请给我建议如何以及在哪个方向我应该着手解决这个问题...

理想情况下,您应该添加逻辑到您的模型,以防止这种类型的控制器滥用。

您可以在模型中访问预定义的回调函数,以在执行搜索之前更改请求数据。这听起来像你想添加一些逻辑到beforeFind()方法。

食谱:http://book.cakephp.org/view/1049/beforeFind API:http://api13.cakephp.org/class/model#method-ModelbeforeFind

没有一个代码示例,很难提出准确的解决方案,但这样的事情:

// app/models/yourmodel.php 
beforeFind() { 
    if(/*yourlogic*/) { 
     unset($queryData['yourmodel']['created_after']; 
     unset($queryData['yourmodel']['created_after']; 
    } 
}