我有一个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
操作中使用一些自定义代码?这很容易,但我想找一个更干净的解决方案
答案 0 :(得分:0)
我希望此行为仅应用于索引操作,而不是每次应用过滤器
在您的控制器中:
if ($this->request->action === 'index') {
$this->loadComponent('Search.Prg');
}
但是,我建议the FoC Search plugin。它有一个更好的架构,更适合Cake3。它可以做同样的事情,但代码比CDC插件少得多。