首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Yii2 :验证是否至少选中了一个复选框

Yii2 :验证是否至少选中了一个复选框
EN

Stack Overflow用户
提问于 2016-12-18 22:25:52
回答 1查看 1.7K关注 0票数 1

我有多个音乐版本的用户,他想要创建一个促销,在促销创建表单上,我们列出了所有的释放,我正在使用一个表单模型来创建促销,其中我定义了我在促销表单模型中的几个输入的所有规则。

我想检查用户在保存表单时是否至少选择了一个版本,但由于复选框是动态创建的,因此它不起作用。

我的该字段的表单代码

代码语言:javascript
复制
foreach ($releaseInfo as $releases) {
    if (!is_null($releases->releaseSongs)) {
        echo "<fieldset><legend>" . \yii\helpers\Html::activeCheckbox($model, 'selected_releases[]', ['id' => 'release_' . $releases->id, 'onclick' => '$("#songs_' . $releases->id . '").toggle()', 'label' => false]) . "&nbsp;" . $releases->name . "</legend>";
        foreach ($releases->releaseSongs as $k => $v) {
            echo "<div id='songs_" . $releases->id . "' style='display:none'>";
            echo "<div>";
            echo $v->song->name;
            echo "</div>";
            echo "</div>";
        }
    }
}

echo "</fieldset>";

我在模型中的规则

代码语言:javascript
复制
['selected_releases', 'required', 'on' => ['catalog', 'catalog_update'], 'requiredValue' => 1,
    'when' => function ($model) {return ($model->scenario == self::SCENARIO_CATALOG_BASED || $model->scenario == self::SCENARIO_CATALOG_BASED_UPDATE);},
    'whenClient' => 'function(attribute,value){return ("' . $this->scenario . '"=="' . self::SCENARIO_CATALOG_BASED . '" || "' . $this->scenario . '"=="' . self::SCENARIO_CATALOG_BASED_UPDATE . '")}',
    'message' => 'You must select atleast one release',
]

当我提交表单时,posted的输入变量如下所示

代码语言:javascript
复制
 [selected_releases] => Array(
            [0] => 0
            [1] => 0
 )

规则中的requiredValue不起作用,因为selected_releases是一个值的数组,它总是说

对于规则,我应该如何使用requiredValue参数选项来检查至少一个复选框选择

我是否必须创建自定义验证方法并在验证时调用它

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-22 05:50:26

为此,我使用了自定义的验证方法,我的验证规则如下

代码语言:javascript
复制
['selected_releases', 'checkreleaseSelection'
    , 'on' => ['catalog', 'catalog_update'],
    'when' => function ($model) {return ($model->scenario == self::SCENARIO_CATALOG_BASED || $model->scenario == self::SCENARIO_CATALOG_BASED_UPDATE);},
    'whenClient' => 'function(attribute,value){return ("' . $this->scenario . '"=="' . self::SCENARIO_CATALOG_BASED . '" || "' . $this->scenario . '"=="' . self::SCENARIO_CATALOG_BASED_UPDATE . '")}',
]

自定义方法

代码语言:javascript
复制
public function checkreleaseSelection()
{
    $error = true;
    foreach ($this->selected_releases as $selection) {
        if ($selection) {
            $error = false;
        }
    }
    if ($error) {
        $this->addError('selected_releases', 'You must select atleast one of your releases to continue');
    }
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41209265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档