CakePHP 3 - 创建新的Validator

时间:2015-02-10 23:22:12

标签: php validation cakephp cakephp-3.0

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

UsersTable.php -I' m仅发布部分例如..

 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']]); ?>

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

更新

我将演示当前正在发生的事情..此验证我用于表单用户/添加

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'
                ]
            ])
}

现在,这个版本,我用于我的表单Users / Edit

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

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

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

正在发生的是该消息&#34;密码低...&#34; (属于&#34; ValidationDefault&#34;)在我的表单Edit中触发..我认为使用上下文只会使用ValidationEditUsers进行验证..为什么不发生?

1 个答案:

答案 0 :(得分:4)

验证器命名约定

您没有在表单中“调用”验证,只需告诉表单上下文使用哪个验证程序(用于检查必填字段)。传递的名称应该省略方法名称的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

继承验证规则

不,没有涉及到任何不干涉,如果需要/想要这个,你必须自己照顾这个,通过调用必要的验证方法,

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

    return $validator;
}

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

    return $validator;
}

这将使editUser验证器“继承”成为默认规则,然后再应用其他规则。

<强>更新

如前所述,表单帮助程序不进行任何验证,它使用验证器来检查哪些字段是必需的,然后设置适当的HTML元素属性。编组请求数据时会发生实际验证,表单助手只显示存储在实体上的错误。

请参阅newEntity()示例和上面的链接,以了解如何定义用于实际验证的验证器。另外,您的代码中有拼写错误,必须是validator,而不是valitador