Проверка списка флажков Yii2 без модели

У меня есть список флажков, которые не связаны с самой моделью, как и остальная часть формы:

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!');   
    }
}

К сожалению, при отправке формы ничего не происходит, как будто нет правил проверки поля «параметры». Где подвох?


person jeesus    schedule 15.09.2015    source источник
comment
вы можете объявить option как public в модели, а затем проверить с помощью модели.   -  person Insane Skull    schedule 15.09.2015
comment
Разве у вас не должно быть оператора break в вашем цикле?   -  person robsch    schedule 15.09.2015
comment
Option уже объявлен как public в модели @InsaneSkull. Также пробовал использовать Option как Option[], поскольку это массив, но безуспешно. @robsch, мне было интересно об этом, но даже если в методе всего $this->addError(), никаких изменений нет.   -  person jeesus    schedule 15.09.2015
comment
если вы объявили public $option, почему бы не использовать его с моделью в форме? Если вы не добавите model в checkbox, он просто пропустит ваши правила проверки, потому что не найдет их.   -  person Insane Skull    schedule 15.09.2015


Ответы (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']); ?>
person marche    schedule 15.09.2015