Проверка количества установленных флажков

#yii2

#yii2

Вопрос:

У меня есть форма для голосования, и я хотел бы проверить минимальное и максимальное количество кандидатов, за которых может проголосовать каждый избиратель. Эти максимальные и минимальные значения сохраняются в сеансе зарегистрированного пользователя. Какой лучший способ сделать это?

МОДЕЛЬ Voto.php

 public static function tableName()
    {
        return 'voto';
    }

    public function rules()
    {
        return [
            [['eleicao_id', 'candidato_id', 'cargo_id', 'urna_id', 'created'], 'required','message'=> 'Selecione no mínimo 1 candidato!'],
            [['eleicao_id', 'cargo_id', 'urna_id'], 'integer'],
            [['created','candidato_id'], 'safe'],
            [['eleitor_hash'], 'string', 'max' => 255],
        ];
    }
  

ФОРМА _form_votacao.php

 <?php $form = ActiveForm::begin(); ?>
    <div class="row">
    <?php
    $candidato = ArrayHelper::map(candidato::find()
                    ->where(['status' => 1])
                    ->Andwhere(['eleicao_id' => Yii::$app->user->identity->eleicao_id])
                    ->orderBy("nome ASC")
                    ->all(), 'id', 'nome'
                );

    echo $form->field($model, 'candidato_id')->checkboxList($candidato, [
        'class'         => 'h4',
        'data-toggle'   => 'button',
        'item'          => function($index, $label, $name, $checked, $value) {
            return "<label class='col-md-5'><input type='checkbox' {$checked} name='{$name}' value='{$value}'> {$label}</label>";
        }])->label(false);
    ?>
    </div>
    <br>
    <div class="row text-center">
        <div class="form-group">
            <?= Html::submitButton('Confirmar', ['class' => 'btn btn-success']) ?>
        </div>
    </div>

    <?php ActiveForm::end(); ?>
  

Примечание: Этот список кандидатов является динамическим, загружает кандидатов в соответствии с параметрами пользователя, вошедшего в систему.

ОБНОВЛЕНИЕ правил ТЕСТИРОВАНИЯ:

 public function rules()
    {
        return [
            ['candidato_id', 'validateCandidates','message'=> 'teste'],
        ];
    }

    public function validateCandidates($attribute, $params, $validator){
        if(count($this->candidato_id) >= 4){ // test with value 4
            $this->addError($attribute, 'Error message');
        }
    }
  

Комментарии:

1. Создайте пользовательское правило проверки: yiiframework.com/doc/guide/2.0/en /…

Ответ №1:

Создайте пользовательскую проверку. Что-то вроде этого:

Модель Voto.php

     public function rules()
        {
            return [
            ....
            ['candidato_id', 'validateCandidates'],
            ....   
            ];
        }

    public function validateCandidates($attribute, $params, $validator){
        if(count($this->candidato_id) < {session_min} and count($this->candidato_id) > {session_max}){
            $this->addError($attribute, 'Error message');
        }
    }
  

Комментарии:

1. Мне не удалось получить количество элементов в массиве

2. Я сделал, как вы сказали, но вы не выполняете проверку. Форма отправляется в обычном режиме

3. хехе, мне нужно было вставить $ model-> validate () в контроллер