На самом деле я не понимаю, почему вы должны проверять результаты поиска (я думаю, что если один из входных данных поиска по какой-то причине не подходит, тогда запрос просто вернет ноль записей), но я думаю, у вас есть свои причины, поэтому здесь это как это сделать. В любом случае это работает даже для сохранения сущностей так:
Соглашения об использовании имен
Прежде всего, используйте g именование тортов для ваших элементов управления, как объяснено здесь и здесь
Это работает, даже если имя вашей БД не соответствует стандарту тортов.
Создание правил проверки
Затем в каждый вашей таблицы создает набор проверок. Вы можете создать различные проверки для разных видов использования (сохранить, обновить, выполнить поиск) (см. здесь ). В вашем случае вы хотите создать набор для поиска.
Таким образом, в ваших таблицах (в каждой таблице!) Вы можете создать метод с именем validationSearch
public function validationSearch($validator)
{
$validator
->add('title', 'notEmpty', [
'rule' => 'notEmpty',
'message' => __('You need to provide a title'),
]);
return $validator;
}
Патч сущности
тогда в вас FrontController
вы можете сделать
$this->loadModel('Substances');
$substance = $this->Substances->newEntity(
$this->request->getData(),
[
'validate' => 'search', // tells cake to use validateSearch
// for Substances Table
'associated' => [
'Cas' => [
'validate' => 'search', // you want to use validateSearch
// even for this table
],
'Ecs'=> [
'validate' => 'search', // and for this table, too
],
// list of other related tables here
// you can nest the array if you have
// nested relationships
]
]
);
это создаст объект, содержащий ваши данные, но прежде всего он проверит наличие проблем с проверкой и сохранит ошибки в объекте $substance
.
$this->set('substance', $substance );
вышеизложенное передаст вашу вновь созданную сущность в форму
Создать форму
и наконец в поле зрения
<?php echo $this->Form->create($substance , [ /*... */ ]); ?>
Таким образом, форма знает о сущности, применяемых правилах проверки и отображаемых ошибках валидации
Создание элементов управления
Предположим, у вас есть «главная» таблица, то есть все остальные таблицы как-то связаны с этим. Допустим, это Вещества. Так что следуйте соглашениям.
<?= $this->Form->control('name', ['label' => 'Substance name') ?>
// ^ No need to prepend the table here
<?= $this->Form->control('cas.number', ['label' => 'Cas number') ?>
<?= $this->Form->control('ecs.number', ['label' => 'Ecs number') ?>
Используйте плагин
И рассмотрите возможность использования плагина FriendsOfCake / search. С таким количеством полей, чтобы проверить это упростит вашу жизнь