【发布时间】:2016-04-18 11:24:19
【问题描述】:
我想验证模型的某些字段,因为我正在实施多步骤表单。 CakePHP 2 中的This method 在版本 3 中不起作用。如何继续?
【问题讨论】:
标签: php validation cakephp-3.0
我想验证模型的某些字段,因为我正在实施多步骤表单。 CakePHP 2 中的This method 在版本 3 中不起作用。如何继续?
【问题讨论】:
标签: php validation cakephp-3.0
请参阅using a different validation set 上的文档。您将需要设置验证表单每个步骤的函数,并指定在 newEntity 或 patchEntity 调用中使用哪个函数。对于多步骤表单,第二步的验证可能会添加第一步的验证,以确保没有篡改之间的数据。所以,你会有这样的东西:
在步骤1的控制器功能中:
$entity = $table->newEntity(
$this->request->data,
['validate' => 'step1']
);
在第二步的控制器函数中:
$entity = $table->newEntity(
$this->request->data,
['validate' => 'step2']
);
等等
在你的表类中:
public function validationStep1($validator)
{
$validator
->add('email', 'notEmpty', [
'rule' => 'notEmpty',
'message' => __('Provide a valid email'),
])
->add('username', 'notEmpty', [
'rule' => 'notEmpty',
'message' => __('Provide a valid username')
]);
return $validator;
}
(可能还有其他验证,例如确保电子邮件地址有意义)。
然后
public function validationStep2($validator)
{
$validator = $this->validationStep1($validator)
->add('first_name', 'notEmpty', [
'rule' => 'notEmpty',
'message' => __('Provide your first name'),
]);
return $validator;
}
等等。
【讨论】:
是的,看起来在蛋糕 3 中他们摆脱了 validates() 方法。只有当您调用newEntity 或patchEntity 时才会触发验证。如果逐个验证很重要,您可能需要分别修补每个字段并在每个字段后检查错误。
$userEntity = $usersTable->newEntity();
$userEntity = $usersTable->patchEntity(['email' => 'not an email!!']);
if($userEntity->errors('email')){
return false; // Invalid email
}
根据
http://book.cakephp.org/3.0/en/orm/validation.html#using-validation-as-application-rules
【讨论】:
if($userEntity->errors(['email', 'username'])),但仍然收到有关所有其他字段的消息。
$errors = $validator->errors($this->request->data()); if (isset($errors['email'])) { return false; }