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
代码希望对你有所帮助。
我有一个模型,例如 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
代码希望对你有所帮助。