代码之家  ›  专栏  ›  技术社区  ›  Toma Tomov

Yii2 GridView操作列不发送post参数

  •  1
  • Toma Tomov  · 技术社区  · 7 年前

    我正在尝试通过 Html:a() my中的元素 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 设置为仅接收 邮递 请求。 var_dump($_POST) 在操作中为空数组。

    1 回复  |  直到 7 年前
        1
  •  1
  •   rob006    7 年前

    你的身份证在 $_GET .的第二个参数 Html::a() 方法用于生成URL,它不为POST请求定义数据。因此,您正在向发送空(无数据)POST请求 /my-controller/c-update?id=123 URL。

    您可以在操作中轻松获得此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参数来识别请求的资源非常好。