2015-06-08 2 views
0

У меня есть эта форма с 14 флажками, некоторые из них могут быть проверены, и пользователь может снять их при необходимости.Проверено и непроверено значение флажка передано в контроллер

<?php $form = ActiveForm::begin(); ?> 

<h3>New Courses</h3> 
<?= GridView::widget([ 
'dataProvider' => $ns_dataProvider, 
'summary' => "{totalCount} courses", 
'columns' => [ 
    [ 
     'label'=>'Register', 
     'format' => 'raw', 
     'value'=>function ($data) use($student, $active_session_semester) { 
      // return Html::a(Html::encode("Register"),'site/index'); 
      $studentsubject = \app\models\Studentsubject::find()->where([ 
       'student_id' => $student->id, 
       'subject_id' => $data->id, 
       'level_id' => $student->current_level_id, 
       'session_semester_id' => $active_session_semester->id, 
      ])->all(); 
      $countstudentsubject = count($studentsubject); 


      if ($countstudentsubject > 0) { 
      return Html::checkbox('subject_id[]',true,['uncheck'=>"r".$data->id,'value'=>$data->id]);} 
      else { 
       return Html::checkbox('subject_id[]', false, ['uncheck'=>"r".$data->id,'value' => $data->id]); 
      } 
     }, 
    ], 

    'subject_title', 

    ], 
    ]); ?> 
    <div class="form-group"> 
     <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> 
    </div> 

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

</div> 

Я извлекаться значение флажка, как этот

if (Yii::$app->request->post()) { 
     $x = Yii::$app->request->Post(); 
     $subject_ids = $x['subject_id']; 
     var_dump($subject_ids); 
    } 

Однако я получаю это как массив с 16 возвращаемые значения вместо 14:

array (size=16) 
    0 => string 'r273' (length=4) 
    1 => string '273' (length=3) 
    2 => string 'r274' (length=4) 
    3 => string '274' (length=3) 
    4 => string 'r275' (length=4) 
    5 => string 'r295' (length=4) 
    6 => string 'r296' (length=4) 
    7 => string 'r297' (length=4) 
    8 => string 'r423' (length=4) 
    9 => string 'r424' (length=4) 
    10 => string 'r425' (length=4) 
    11 => string 'r590' (length=4) 
    12 => string 'r591' (length=4) 
    13 => string 'r592' (length=4) 
    14 => string 'r593' (length=4) 
    15 => string 'r594' (length=4) 

Когда я проверить флажок , отправляются как проверенные, так и непроверенные значения. Я что-то упускаю? Является довольно новым для yii2. Любые советы, предложения и решения будут высоко оценены.

ответ

0

В вашей модели установлен флажок с 16 значениями, а submit возвращает все из них, факт, что они отмечены или снимите флажок, если они не будут отправлены. Это не проблема Yii2. Это обычное поведение для метода отправки POST

+0

В моей форме только 14 флажков. Массив [0] и массив [1] исходят из одного флажка. и Array [2], а массив [3] исходит из второго флажка. поэтому число массивов равно 16 не 14 – Jen

+0

Я хочу отправить проверенное значение, если флажок установлен, и снимите флажок, если это не так. Любая идея, как я могу это сделать в yii? – Jen

+0

Вы просто не можете. HTTP POST (метод, используемый для подпрограммы foirm) обеспечивает полное представление всех данных в модели. и для флажка это означает все его значения. Перед сохранением данных вы должны управлять данными, представленными в контроллере. – scaisEdge