Yii使用POST,但真的使用GET?

时间:2013-05-22 16:06:09

标签: php yii

我注意到CGridView按钮使用POST,但实际上没有POST任何东西。它对像GET这样的URL进行POST。

示例:

将POST空为site/controller/action/param1/value1/param2/value2,而我认为它应该发布到site/controller/action并在param1中有param2POST body

是否可以改变它?

谢谢

1 个答案:

答案 0 :(得分:1)

传递params作为GET用于方便。在Yii crud中,有一个_loadModel方法来加载模型,它使用$_GET param。但是,为了避免通过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请求。