问题:给定两个字段a和b,要求必须出现至少一个
特点:一次性校验多个字段
在Yii2里,框架本身提供了一系列的校验器帮助我们校验用户输入,例如required
、compare
、range
、date
等等,它们大多数都是描述某一个字段应该符合什么样的规则。如果我们要对某几个字段之间的关系进行校验,就找不到对应的内置的核心校验器了。但是对字段之间的关系进行描述这种需求也不是很少见,这里提供一些在Yii2中实现这种校验的思路。
Conditional Validation
['fieldA', 'required', 'when' => function($model) {
return empty($model->fieldB);
}, 'message' => 'fieldA or fieldB is required'],
Inline Validator
public function rules()
{
return [
[['fieldA', 'fieldB'], 'eitherOneRequired', 'skipOnEmpty' => false, 'skipOnError' => false],
];
}
public function eitherOneRequired($attribute, $params, $validator)
{
if (empty($this->fieldA)
&& empty($this->fieldB)
) {
$this->addError($attribute, 'fieldA or fieldB is required');
return false;
}
return true;
}
参考:
- https://stackoverflow.com/questions/7081066/yii-form-model-validation-either-one-is-required
- https://www.yiiframework.com/doc/guide/2.0/en/tutorial-core-validators
- https://www.yiiframework.com/doc/guide/2.0/en/input-validation
- https://yii2-cookbook.readthedocs.io/forms-validator-multiple-attributes/
网友评论