1

我注意到 CGridView 按钮使用 POST,但实际上并没有发布任何内容。它像 GET 一样对 URL 进行 POST。

例子:

它 POST 空到site/controller/action/param1/value1/param2/value2,而我认为它应该 POST 到site/controller/action并拥有param1param2in POST body

有可能改变它吗?

谢谢

4

1 回答 1

1

为方便起见,将参数作为 GET 传递。在 Yii crud 中,有一个_loadModel加载模型的方法,就是使用$_GETparam。但是,为了避免通过 GET 删除,检查它是否是发布请求。这是一些(精简到最低限度)示例:

private function _loadModel()
{
    // Find method uses get here, for most actions it is fine
    return User::model()->findByPk($_GET['id']);
}

// Destructive action
public function actionDelete()
{
    // Check if it really comes from post
    if(Yii::app()->request->isPostRequest())
    {
        $this->_loadModel()->delete();
    }
    else
    {
        throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
    }
}

对于 ajax,它是 GET 还是 POST 并不重要,在正常请求中,但是浏览器会在尝试刷新时要求您重新提交 POST 数据。

当浏览器开始使用 URL 预取时,开始推荐使用 POST 进行破坏性或内容更改操作,以获得更快的响应。在早期的 AJAX 应用程序中,通过 get 进行了大量破坏性操作。在浏览器中实现 URL 预取的结果是这些应用程序在示例查看列表时删除了所有记录:) 这是使用 POST 而不是 GET 的主要原因。但无论如何,蜘蛛可能会遵循这样的网址。这就是为什么在服务器端检查它是否真的是一个 POST 请求很重要。

于 2013-05-22T19:24:17.063 回答