CakePHP 3自定义验证:如何在编辑期间将新值与旧值进行比较?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CakePHP 3自定义验证:如何在编辑期间将新值与旧值进行比较?相关的知识,希望对你有一定的参考价值。

我有一个案例,我想让用户只在版本期间增加价值。为此,我必须将请求中传递的新值与存储在DB中的实体的旧值进行比较。

自定义验证函数接收两个参数:$check,它是要验证的值,数组$context包含提交表单中的其他值。

在Cakephp 3中以我需要的方式验证版本的最佳方法是什么?甚至可以使用验证规则吗?

答案

你可以使用Application Rules

您必须在Table对象中创建一个新的新规则

假设您要检查的字段是priority

因此,在您的规则中,您检查priority(刚刚更改)的值与$entity->getOriginal('priority')中存储的原始值

public function buildRules(RulesChecker $rules)
{

    // This rule is applied for update operations only
    $rules->addUpdate(function ($entity, $options) {
        if($entity->priority >= $entity->getOriginal('priority'))
            return true;
        else
            return false;
    }, 
    'CheckPriority', // The name of the rule
    [
        'errorField' => 'priority', // the field you want 
                                    // to append the error message
        'message' => 'You have to set a higher Priority' // the error message
    ]);

    return $rules;
}

以上是关于CakePHP 3自定义验证:如何在编辑期间将新值与旧值进行比较?的主要内容,如果未能解决你的问题,请参考以下文章

在每次迭代期间将新值附加到列表中后,将列表值添加到字典中

CakePHP 2.2.1 - 在表单上显示 CakePHP 错误 - 自定义验证

在 cakephp 中编辑用户配置文件后如何更改身份验证用户名

使用自定义身份验证适配器时检查 CakePHP 上的登录用户信息

CakePHP 数据在验证期间发生更改,并且 beforeSave 未随更改一起保存

如何将新值推送到 Store 对象?