Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CakePHP 3-创建新的验证程序_Php_Validation_Cakephp_Cakephp 3.0 - Fatal编程技术网

CakePHP 3-创建新的验证程序

CakePHP 3-创建新的验证程序,php,validation,cakephp,cakephp-3.0,Php,Validation,Cakephp,Cakephp 3.0,您好:我想创建一个新的验证数据。当我烘焙模型时,它会生成一个验证 UsersTable.php-我只发布了部分示例 public function validationDefault(Validator $validator) { $validator ->add('id', 'valid', ['rule' => 'numeric']) ->allowEmpty('id', 'create');

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

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']]); ?>
现在,这个值,我用于我的表单用户/编辑

public function validationEditUsers(Validator $validator){
         //Its empty 
}
这就是我告诉表单上下文使用哪个验证器的方式

<?= $this->Form->create($user,['context' => ['valitador' => 'editUsers']]) ?>
发生的情况是消息密码低。。属于ValidationDefault在我的表单编辑中触发。。我认为使用上下文只需使用ValidationEdit用户进行验证。。为什么不会发生这种情况?

验证程序命名约定 您不需要在表单中调用验证,只需要告诉表单上下文使用哪个验证器来检查必填字段。传递的名称应省略方法名称的验证部分,并以小写开头,因此在您的情况下是editUser

当指定在封送请求数据时使用哪个验证器时,同样的规则也适用

$Table->newEntity($this->reqeust->data, [
    'validate' => 'editUser'
]);
继承验证规则 不,不涉及内在性,如果需要,你必须自己处理,通过调用必要的验证方法,按照

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

public function validationEditUser(Validator $validator)
{
    $this
        ->validationDefault($validator)
        ->add(/* ... */);
    
    return $validator;
}
这将使editUser验证程序在应用其他规则之前继承默认规则

更新

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


请参考newEntity示例和上面的链接,以了解如何定义用于实际验证的验证器。另一方面,您的代码中有一个输入错误,它必须是validator,而不是valitador

所以任何为我创建的验证,我都省略了验证方法的名称?啊。。我进行了测试,但不起作用,因为有一些validationDefault的验证在我不想要的地方起作用@thiagomoraest函数validationDefault中的验证在我的表单User/Edit中工作。。好吗?@ThiagoMoraes对不起,我不明白,你到底想问什么吗?
$Table->newEntity($this->reqeust->data, [
    'validate' => 'editUser'
]);
public function validationDefault(Validator $validator)
{
    $validator
        ->add(/* ... */);
    
    return $validator;
}

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