Yii2 GridView操作列不发送post参数

时间:2018-05-08 07:39:48

标签: yii2 yii2-advanced-app

我正在尝试通过Html:a()中的GridView元素发送简单的帖子参数。但是id没有达到行动。这就是我尝试过的(见文档):

[
    'class' => 'yii\grid\ActionColumn',
    'template' => '{update} {delete}',
    'buttons' => [
        'update' => function($url, $model){
            return Html::a('<span class="glyphicon glyphicon-edit"></span>', ['c-update', 'id' => $model->id], [
                'data' => [
                    'method' => 'post',
                ],
            ]);
        }
    ]
],

方法为post,在控制器动词中,操作c-update设置为仅接收post个请求。动作中的var_dump($_POST)是空数组。

1 个答案:

答案 0 :(得分:1)

您的ID位于$_GETHtml::a()方法的第二个参数用于生成URL,它不定义POST请求的数据。因此,您要向/my-controller/c-update?id=123网址发送空(无数据)POST请求。

您可以在行动中轻松获取此ID:

public function actionCUpdate($id) {
    // ...
}

如果您确实想要将ID作为POST数据发送,您应该执行以下操作:

Html::a('<span class="glyphicon glyphicon-edit"></span>', ['c-update'], [
    'data' => [
        'method' => 'post',
        'params' => [
            'id' => $model->id,
        ],
    ],
]);

但你可能不应该这样做。当您将修改记录的ID作为POST数据发送时,很容易丢失上下文(因为每个记录URL都是相同的)。使用GET参数来识别所请求的资源是完全没问题的。