select 字段的 Yii2 验证规则

Yii2 validation rule for select field

我有一个模型,例如 SomeForm。有一个字段。该字段包含一系列选定的选项。是否可以为这个字段编写一个规则来检查有多少项目被选中?我需要写一个条件,用户必须检查最少 2 个选项和最多 5 个选项。

我尝试过类似的方法,但它不起作用(如果至少选择了一个选项,则可以提交表单)

public function rules()
{
    return [
        [['ingredients'], 'required'],
        ['ingredients', 'checkIsArray']
    ];
}
public function checkIsArray($attribute, $params)
{
    if (empty($this->ingredients)) {
        $this->addError($attribute, "config cannot be empty");
    }
    elseif (count($this->ingredients)>5) {
        $this->addError($attribute, "Choose more");
    }
    elseif (count($params)<2) {
        $this->addError($attribute, "Choose less");
    }
}

是的,你可以,但是你有一个错误的变量分配,即 $params 在最后一个条件 elseif (count($params)<2) 你正在计算 $params 而不是 $this->ingredients 数组。而且不需要先检查,在required rule中添加属性,提交时检查是否为空即可。

将验证函数更改为

public function checkIsArray( $attribute , $params ) {

    if ( count ( $this->ingredients ) > 5 ) {
        $this->addError ( $attribute , "Choose No more than 5" );
    } elseif ( count ( $this->ingredients ) < 2 ) {
        $this->addError ( $attribute , "Choose No less than 2" );
    }
}

我刚刚在使用 kartik\Select2 多选发布之前对其进行了测试,它工作正常,但如果它的反应仍然相同,则需要添加 controller/action代码希望对你有所帮助。