再次嗨:)我想创建一个新的验证数据。当我烘焙模型时,它会生成验证
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 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;
}
现在,我将这个验证用于我的表单“用户/编辑”
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
继承验证规则
不,不涉及继承,如果需要/想要这个,您必须自己处理这个问题,通过调用必要的验证方法,类似于
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
!
关于php - CakePHP 3 - 创建新的验证器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28443794/