Этот вопрос несколько вытекает из предыдущего вопроса, который я задавал о реализации проверки при выполнении поиска в приложении Cake 3.x: Форма поиска CakePHP 3.x с 11 различными моделями
Я читал документацию по Использование пользовательских правил проверки .
Я добавил следующее к своему Model/Table/EcsTable.php
:
public function validationSearch($validator)
{
$extra = 'Some additional value needed inside the closure';
$validator->add('value', 'custom', [
'rule' => function ($value, $context) use ($extra) {
return false;
},
'message' => 'The title is not valid'
]);
return $validator;
}
Это копия того, что указано в документации, за исключением того, что я добавил return false
, потому что я пытаюсь проверить метод проверки, выдающий ошибку.
В моем контроллере у меня есть следующее:
$ecs_entity = TableRegistry::get('Ecs')->newEntity(
$this->request->getData(),
[
'validate' => 'search', // tells cake to use validateSearch
]
);
Я не могу получить это, чтобы вызвать ошибку проверки. Если я отправляю свою форму (чтобы данные запроса были отправлены), а затем выполняю debug($ecs_entity);
, свойство errors
является пустым массивом:
object(Cake\ORM\Entity) {
'ecs' => [
'value' => '124'
],
// ...
'[original]' => [],
'[virtual]' => [],
'[errors]' => [],
'[invalid]' => [],
'[repository]' => 'Ecs'
}
Почему это? Я планирую написать логику внутри моего замыкания внутри validationSearch
, которая проверяет переданные данные. Тем не менее, я даже не могу заставить его выдавать ошибку, поэтому не зашел так далеко. Я неправильно это реализую?
В соответствии с первоначальным вопросом, я пытаюсь сделать вещи в правильном «Cake way» написании проверки. Я дошел до того, что всерьез подумываю о том, чтобы отказаться от него и просто вставить все в контроллер, потому что так утомительно передавать данные - и требует больше строк кода, когда я могу просто проверить их прямо в контроллере. ,
Как обычно, любая помощь приветствуется.