【问题标题】:Yii2 checkboxlist validation without model没有模型的 Yii2 复选框列表验证
【发布时间】:2015-09-15 11:03:15
【问题描述】:

我有一个复选框列表,与表单的其余部分一样,它们与模型本身没有关联:

echo Html::checkboxList('options', $selected_options, $options, ['class' => 'checkbox']);

在模型中我有以下规则:

public function rules() {
    return [
        ....*/
        [['options'], 'integer'],
        ['options', 'optValidation', 'on' => 'update'],
    ];
}

还有以下验证器:

public function optValidation($attribute, $params) {
    foreach ($attribute as $attr){
        if ($attr == 1) {
            $return = true;
        }
        else {
            $return = false;
        }
    }
    if (!$return) {
        $this->addError($attribute, 'At least one checkbox has to be selected!');   
    }
}

不幸的是,提交表单时没有任何反应,好像没有验证字段“选项”的规则。问题在哪里?

【问题讨论】:

  • 您可以在模型中将option 声明为public,然后使用模型进行验证。
  • 你的循环中不应该有break 语句吗?
  • Option 已在模型 @InsaneSkullll 中声明为 public。还尝试将Option 设置为Option[],因为它是数组,但没有运气。 @robsch,我想知道,但即使在方法中只有 $this->addError() 也没有变化。
  • 如果你声明了public $option,为什么不将它与模型一起使用呢?如果您不会在checkbox 中添加model,它只会跳过您的验证规则,因为它没有找到它们。

标签: validation yii2 checkboxlist


【解决方案1】:

您需要在模型类中添加options 作为公共属性。然后你需要在你的规则中将它设置为安全的:

public function rules() {
    ...
    [['options'], 'integer'],
    [['options'], 'optValidation', 'on' => 'update'],
    [['options'], 'safe'],
    ...

最后,您必须像其他与您的模型相关的输入一样生成输入,即使它不存在于您的数据库表中,您也需要它在您的模型中:

<?php echo $form->field($model, 'options')->checkboxList('options', $selected_options, $options, ['class' => 'checkbox']); ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多