嗨再次:)我想创建一个新的验证数据。当我烘焙我的模型时,它会生成验证
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进行验证..为什么不发生?
答案 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
!