【发布时间】:2021-02-24 14:22:52
【问题描述】:
我有一个表单,可以在其中配置字段所需的验证规则并将其存储在模型中。
在呈现表单时,我创建了如下(简化)的验证规则,效果很好。
$view_parameters = $competition_article->view_parameters;
if (!empty($view_parameters) && is_array($view_parameters)) {
foreach ($view_parameters as $parameter_key => $parameter_value) {
$field_name = $parameter_value['name'];
$field_required = $parameter_value['required'];
if ($field_required) {
Validator::createValidator('required', $model, [$field_name]);
}
}
}
对于表单提交,我使用自定义验证规则。这适用于除文件附件之外的所有内容。
public function rules()
{
$rules = [
[['firstname', 'surname', 'closeststore', 'email', 'phone', 'response', 'attachment'],
'dynamicValidator',
'skipOnEmpty' => false
],
[['attachment'], 'file',
'extensions' => 'pdf, jpeg, jpg, doc, docx',
'checkExtensionByMimeType'=>false
],
];
return $rules;
}
在自定义验证方法上,我单独处理文件。 我试过了 a) addError() 并返回 false b) createValidator() 和 validateAttribute() 对,适用于文本字段。
public function dynamicValidator($attribute, $params, $validator )
{
$view_parameters = $this->view_parameters;
if ($view_parameters[$attribute]['required'])
$validator = new Validator();
if ($attribute == 'attachment') {
if (empty($_FILES['CompetitionForm']['name']['attachment']))
[$attribute]);
$this->addError( $attribute, 'Please include your attachment to enter.');
// NOTE : Adding the validator has no effect
// $validator = $validator->createValidator('required', $this,
// $validator->validateAttribute($this, $attribute);
return false;
}
$validator = $validator->createValidator('required', $this, [$attribute]);
$validator->validateAttribute($this, $attribute);
}
}
尽管到达了代码,但在需要附件并且调用 addError() 或 createValidator() 时不会引发错误。
如果没有附加文件并且需要附件,我如何无法通过验证?
【问题讨论】:
标签: yii2 yii2-model yii2-validation