Yii2校验:两个字段必须出现一个(either one is

2018-04-03  本文已影响0人  syca

问题:给定两个字段ab,要求必须出现至少一个
特点:一次性校验多个字段

在Yii2里,框架本身提供了一系列的校验器帮助我们校验用户输入,例如requiredcomparerangedate等等,它们大多数都是描述某一个字段应该符合什么样的规则。如果我们要对某几个字段之间的关系进行校验,就找不到对应的内置的核心校验器了。但是对字段之间的关系进行描述这种需求也不是很少见,这里提供一些在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;
}

参考:

上一篇下一篇

猜你喜欢

热点阅读