Пользовательский метод проверки Cakephp возвращает false, но не сохраняет и не отображает сообщение
У меня есть следующий валидатор в ValidationDefault, чтобы проверить, не наступает ли дата effective_until после даты effective_on. Если false, должно отображаться сообщение.
$validator
->add('effective_until', 'custom', ['rule' => 'checkEffectiveDateRange', 'provider' => 'table', 'message' => 'The effective until date must come after the effective on date.']);
У меня есть следующая настраиваемая функция в той же таблице, но даже когда я намеренно устанавливаю дату Effective_until раньше, чем дата Effective_on, она сохраняет данные и не отображает сообщение об ошибке проверки. Я что-то здесь делаю не так?
public function checkEffectiveDateRange($check, $context)
{
if(array_key_exists('newRecord',$context))
{
return strtotime($context['data']['effective_on']) < strtotime($check);
}
else
{
return strtotime($context['effective_on']) < strtotime($check);
}
}
1 ответ
Решение
Для всех, кому это может понадобиться, я решил это, изменив валидатор на ниже
Валидатор
public function validationDefault(Validator $validator): Validator
{
$validator
->add('effective_until', 'custom',
['rule' => function($check, $context) {
if($this->checkEffectiveDateRange($check, $context)) {
return true;
}
return false;
},
'message' => 'The effective until date must come after the effective on date.']);
return $validator;
}