CakePHP 3 - 创建新的验证器

CakePHP 3 - Create new Validator

您好 :) 我想创建一个新的验证数据。当我烘焙我的模型时,它会生成一个验证

UsersTable.php - 例如,我只发布了一部分..

 public function validationDefault(Validator $validator)
    {
         $validator
            ->add('id', 'valid', ['rule' => 'numeric'])
            ->allowEmpty('id', 'create');
   return $validator;
}

我会创建另一个..在其中我将验证写入另一个表单..例如编辑

public function validationEditUser(Validator $validator){
...
}

这就是我所说的验证?

<?= $this->Form->create($user,['context' => ['valitador' => 'validationEditUsers']]); ?>

我创建的验证之间是否存在继承过程??

已更新

我将演示当前正在发生的事情。我正在为我的表单使用此验证 Users/Add

public function validationDefault(Validator $validator)
    {
         $validator            
            ->requirePresence('password', 'create')
            ->notEmpty('password',"Field's empty")
            ->add('password',[
                'minLength' => [
                'rule' => ['minLength', 5],
                'last' => true,
                'message' => 'Password is low, add more characters'
                ]
            ]);
         return $validator;
}

现在,我正在将此验证用于我的表单 Users/Edit

public function validationEditUsers(Validator $validator){
         //Its empty 
}

这就是我告诉表单上下文要使用哪个验证器的方式

<?= $this->Form->create($user,['context' => ['valitador' => 'editUsers']]) ?>

发生的事情是在我的表单编辑中触发消息“密码低..”(属于“ValidationDefault”)..我认为使用上下文只会使用 ValidationEditUsers 进行验证..为什么不它发生了吗?

验证器命名约定

您不会在表单中“调用”验证,您只是告诉表单上下文要使用哪个验证器(用于检查必填字段)。传递的名称应省略方法名称的 validation 部分,并开始小写,因此在您的情况下 editUser.

$this->Form->create($user, [
    'context' => [
        'validator' => 'editUser'
    ]
]);

http://book.cakephp.org/3.0/en/views/helpers/form.html#using-custom-validators

在指定编组请求数据时使用哪个验证器时,同样的规则适用。

$Table->newEntity($this->reqeust->data, [
    'validate' => 'editUser'
]);

http://book.cakephp.org/3.0/en/orm/saving-data.html#validating-data-before-building-entities

继承验证规则

不,不涉及继承,如果 need/want 这个,你必须自己处理,通过调用必要的验证方法,类似于

public function validationDefault(Validator $validator)
{
    $validator
        ->add(/* ... */);
    
    return $validator;
}

public function validationEditUser(Validator $validator)
{
    $this
        ->validationDefault($validator)
        ->add(/* ... */);
    
    return $validator;
}

这将使 editUser 验证器“继承”成为应用其他规则之前的默认规则。

更新

正如最初提到的,表单助手不做任何验证,它使用验证器的全部目的是检查哪些字段是必需的,然后设置适当的 HTML 元素属性。实际验证发生在编组请求数据时,表单助手仅显示存储在实体上的错误。

请参考上面的 newEntity() 示例和 link 来了解如何定义用于实际验证的验证器。附带一提,您的代码中有一个拼写错误,它必须是 validator,而不是 valitador!