只需一次操作即可使用过滤器进行DC搜索

时间:2015-10-14 11:42:08

标签: php cakephp cakephp-3.0 cakedc

我有一个devices/index页面,默认情况下我不想显示"无序"设备,除非我标记了一个正确的复选框

所以我使用了CakeDC搜索插件3并且我使用了

DevicesTable

 public $filterArgs = [


     'include_out_of_order' => [
        'type' => 'finder', 
        'finder' => 'outOfOrder',
        'allowEmpty' => true
    ],  

     // ...
     // lot of other filters
     // ...

 ]


public function findOutOfOrder($query, array $options)
{
    if(isset($options['include_out_of_order']) &&  $options['include_out_of_order'] == true)
        return $query;   
    else
        return $query->where(['Devices.device_status_id !=' => 2]);  //status = 2 means the device is out of order

}

现在这可以在index视图中使用,但它也适用于我使用搜索插件过滤记录的另外两个操作。

我希望此特定过滤器仅适用于index操作,而所有其他过滤器应适用于设备控制器的其他操作

有没有其他方法可以实现我尝试使用cakeDC插件做的事情,或者我应该在控制器内的index操作中使用一些自定义代码?这很容易,但我想找一个更干净的解决方案

1 个答案:

答案 0 :(得分:0)

  

我希望此行为仅应用于索引操作,而不是每次应用过滤器

在您的控制器中:

if ($this->request->action === 'index') {
    $this->loadComponent('Search.Prg');
}

但是,我建议the FoC Search plugin。它有一个更好的架构,更适合Cake3。它可以做同样的事情,但代码比CDC插件少得多。