у меня есть 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
действие внутри контроллера? Было бы легко, но я бы хотел найти более чистое решение
Я хочу, чтобы это поведение применялось только в действии индекса, а не каждый раз, когда я применяю фильтр
В вашем контроллере:
if ($this->request->action === 'index') {
$this->loadComponent('Search.Prg');
}
Тем не менее, я бы порекомендовал плагин поиска FoC. Он имеет лучшую архитектуру и лучше подходит для Cake3. Он может делать то же самое, но имеет гораздо меньше кода, чем плагин CDC.
Других решений пока нет …