【问题标题】:Checked and Unchecked value of checkbox get submitted to controller复选框的选中和未选中值提交给控制器
【发布时间】:2020-08-03 08:54:37
【问题描述】:

我有这个包含 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 很陌生。任何意见、建议和解决方案都将受到高度赞赏。

【问题讨论】:

    标签: checkbox yii2


    【解决方案1】:

    在您的模型中有一个包含 16 个值的复选框,并且提交返回所有这些值,这些被选中或取消选中的事实并不意味着它们不会被提交。这不是 Yii2 的问题。这是 POST 提交方法的正常行为

    【讨论】:

    • 我的表单只有 14 个复选框。 Array[0] 和 array[1] 来自一个复选框。和 Array[2] 和 array[3] 来自第二个复选框。这就是为什么数组计数是 16 而不是 14
    • 如果复选框被选中,我想提交选中的值,如果不是,则取消选中值。知道如何在 yii 中做到这一点吗?
    • 你根本做不到。 HTTP POST(使用 foirm subimit 的方法)提供模型中所有数据的完整提交。对于复选框,这意味着它的所有值。您需要在保存前管理好在控制器中提交的数据。
    • 如果对你有用,请评价
    猜你喜欢
    • 2019-09-13
    • 2016-11-20
    • 2018-01-16
    • 1970-01-01
    • 2014-12-29
    • 2014-06-26
    • 2018-01-15
    • 1970-01-01
    • 2013-08-04
    相关资源
    最近更新 更多