Yii2 GridView 操作列不发送 post 参数

Yii2 GridView action column doesn't send post parameter

我正在尝试通过 GridView 中的 Html:a() 元素发送简单的 post 参数。但是 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) 动作中为空数组。

您的 ID 在 $_GETHtml::a() 方法的第二个参数用于生成 URL,它没有为 POST 请求定义数据。因此,您正在向 /my-controller/c-update?id=123 URL 发送空(无数据)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 params 来识别请求的资源是完全没问题的。