#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 () в контроллер