我无法弄清楚如何动态编辑验证规则,例如在我的控制器中。
我的情况:"用户" table有" email"字段,其值必须是"唯一的"在创建和更新时。 现在没关系,我已经创建了正确的验证规则。
但现在我必须创建一个允许用户恢复密码的操作。因此,用户输入其电子邮件地址的表单必须经过验证才能使用此表单。 之后,操作会检查是否有该电子邮件地址并发送电子邮件以重置密码。
所以:我必须使用验证规则验证表单,但在这种特殊情况下,我不需要电子邮件是"唯一的"。
如何仅针对一个操作更改验证规则?
感谢。
修改
也许这个?
class UsersTable extends Table {
public function validationDefault(\Cake\Validation\Validator $validator) {
//Some rules...
$validator->add('email', [
'unique' => [
'message' => 'This value is already used',
'provider' => 'table',
'rule' => 'validateUnique'
]
]);
//Some rules...
return $validator;
}
public function validationOnlyCheck(\Cake\Validation\Validator $validator) {
$validator->remove('email', 'unique');
return $validator;
}
}
在我的行动中:
$user = $this->Users->newEntity($this->request->data(), [
'validate' => 'OnlyCheck'
]);
答案 0 :(得分:10)
在编辑之后,您的问题是CakePHP 3允许您根据用例使用不同/动态验证规则的预期方式。
use Cake\Validation\Validator;
class UsersTable extends Table {
public function validationDefault(Validator $validator) {
//Some rules...
$validator->add('email', [
'unique' => [
'message' => 'This value is already used',
'provider' => 'table',
'rule' => 'validateUnique'
]
]);
//Some rules...
return $validator;
}
public function validationOnlyCheck(Validator $validator) {
$validator = $this->validationDefault($validator);
$validator->remove('email', 'unique');
return $validator;
}
}
然后:
$user = $this->Users->newEntity($this->request->data(), [
'validate' => 'OnlyCheck'
]);