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

时间:2018-07-04 10:22:47

标签: php validation cakephp-3.0

在某些情况下,我只允许用户在编辑过程中增加价值。为此,我必须将请求中传递的新值与数据库中存储的实体中的旧值进行比较。

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

以CakePHP 3中所需的方式验证版本的最佳方法是什么?验证规则甚至有可能吗?

1 个答案:

答案 0 :(得分:1)

您可以使用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;
}