0

我对 CakePHp 和 MVC 的思维方式很陌生。

据了解,我能够通过 Nik Chankov 的 Filter Component 成功创建一个Resultsetfiltering。

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

现在,我有一个包含“created_at”日期的列,我想让用户可以输入开始日期和结束日期并将其传递给过滤器组件。

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

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

4

1 回答 1

0

理想情况下,您应该为模型添加逻辑,以保护它免受控制器的此类滥用。

您可以在模型中访问预定义的回调函数,以在执行搜索之前更改请求数据。听起来您想在 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'];
    }
}
于 2011-12-04T13:42:20.843 回答