【问题标题】:Send POST data as hidden input name value array将 POST 数据作为隐藏的输入名称值数组发送
【发布时间】:2016-01-02 22:43:52
【问题描述】:

我正在使用 yii2 Activeform 和 gridview

表单上有两个字段messagefilesubmit 按钮

gridview在同一页..

因此,当用户从复选框列中选中任何用户并键入 message 时,应将message 发送给所有选定的用户

这是我到目前为止所做的事情

<div class="row">
    <p>
        <?php $form = ActiveForm::begin(['options'=>['enctype'=>'multipart/form-data','id' => 'message-form']]); ?>

    <div class="form-group col-xs-3 col-lg-3">
        <?= $form->field($model, 'message')->textarea(['rows' => 6]) ?>
    </div>
    <div class="form-group col-xs-3 col-lg-3">
        <?= $form->field($model, 'file')->fileInput() ?>
        <?= $form->field($model, 'keys[]')->hiddenInput()->label(false); ?>

        <div class="form-group">
            <?= Html::submitButton('Send',['class' => 'btn btn-danger','data-placement'=>'right','id'=>'sendMessage']) ?>
        </div>
    </div>
    <?php ActiveForm::end(); ?>
    </p>
</div>

上面是表格。现在我可以得到keys 变量,但该数组的格式是这样的

Keys{
  0="1,5,7,6,8"
} 

我希望这种格式是这样的

Keys{
  0="1",
  1="2",
  2="5",
  3="7",
} 

那么我怎样才能将数据连同messagefile 一起发送到该格式的控制器

目前我正在通过隐藏的输出字段发送数据,但它没有以我想要的格式发送数据。 我知道这可以使用 javascript 来完成,但不知道该怎么做??

这是我正在使用的 javaquery

$('input[type="checkbox"]').change(function() {
    var keys = $("#checkin-table").yiiGridView("getSelectedRows");
    sendKeys.val(keys);
    if(keys.length > 0){
        sendMessage.removeClass("disabled");
    }
    else if(keys.length==0){
        sendMessage.addClass("disabled");
    }
});

【问题讨论】:

  • 如果你想转换上面的数组使用explode():php.net/manual/en/function.explode.php
  • @insaneSkulll 我想到了这一点,我可以做到,但explode() 需要将参数作为字符串,我需要先将其转换为字符串,然后再传递它,所以我正在考虑其他一些替代方案。可能正在使用javascript
  • 您可以使用settype()函数将您的数组转换为整数数组。
  • @insaneSkull 好的,让我试试

标签: javascript jquery gridview yii2


【解决方案1】:

据我了解,表单中的隐藏字段仅呈现一次,因为您使用的是[],您只能在$keys 变量中获得索引0,其中包含所有值,您需要$keys = array(1,3,4,5),所以您需要多次渲染键字段,例如:

<?= $form->field($model, 'keys[]')->hiddenInput(['value' => 1])->label(false); ?>
<?= $form->field($model, 'keys[]')->hiddenInput(['value' => 2])->label(false); ?>

如果你不需要这个,你可以在你当前的场景中做:

$keys = Yii::$app->request->post('keys');
$keys = explode(",",$keys[0]);

【讨论】:

  • 你是对的,但我已经编写了一个 javascript,它在提交时将所有选中的列作为数组发送
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-18
  • 1970-01-01
相关资源
最近更新 更多