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
!
您好 :) 我想创建一个新的验证数据。当我烘焙我的模型时,它会生成一个验证
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
!