Пользовательский метод проверки 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;
}
Другие вопросы по тегам