Cakephp自定义验证方法返回False,但不保存也不显示任何消息

问题描述

我在ValidationDefault下具有以下验证器,以检查有效日期是否在有效日期之后。如果为false,则应显示该消息。

$validator
            ->add('effective_until','custom',['rule' => 'checkEffectiveDaterange','provider' => 'table','message' => 'The effective until date must come after the effective on date.']);

我在同一张表中具有以下自定义函数,但是即使我故意将有效日期设置为早于有效日期,它也会保存数据并且不显示验证错误消息。我在这里做错什么了吗?

    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);
        }
    }

解决方法

对于任何可能需要此操作的人,我通过将验证器更改为以下内容来解决了此问题

验证器

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;
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...