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

Php Yii使用POST,但真的使用GET?,php,yii,Php,Yii,我注意到CGridView按钮使用POST,但实际上并不发布任何内容。它可以像GET一样向URL发送帖子 例如: 它向site/controller/action/param1/value1/param2/value2发布空的内容,而我认为它应该向site/controller/action发布,并在POST body中包含param1和param2 有可能改变吗 谢谢为了方便起见,使用GET传递参数。在Yii crud中,有一个加载模型的\u loadModel方法,它使用$\u GET参数。

我注意到CGridView按钮使用POST,但实际上并不发布任何内容。它可以像GET一样向URL发送帖子

例如:

它向
site/controller/action/param1/value1/param2/value2
发布空的内容,而我认为它应该向
site/controller/action
发布,并在
POST body
中包含
param1
param2

有可能改变吗


谢谢

为了方便起见,使用GET传递参数。在Yii crud中,有一个加载模型的
\u loadModel
方法,它使用
$\u GET
参数。然而,为了避免通过GET删除,需要检查它是否是post请求。以下是一些(精简到最低限度)示例:

说到ajax,GET和POST实际上并没有多大关系,但在正常请求中,浏览器会要求您在尝试刷新时重新提交POST数据


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

将参数作为GET传递是为了方便。在Yii crud中,有一个加载模型的
\u loadModel
方法,它使用
$\u GET
参数。然而,为了避免通过GET删除,需要检查它是否是post请求。以下是一些(精简到最低限度)示例:

说到ajax,GET和POST实际上并没有多大关系,但在正常请求中,浏览器会要求您在尝试刷新时重新提交POST数据


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

POST是一个请求方法,一个HTTP动词。您不必向其中添加请求主体。就HTTP而言,这是一个非常好的POST请求。POST不等于正文中的数据,GET不等于URL查询参数。大多数人说,当请求有副作用且GET为只读时,应该使用POST。由于按钮是
Delete
,并且它在服务器中有副作用(不是幂等),因此不应通过URL-query访问。否,它不应是GET请求。不管参数是在URL中还是在请求体中,重要的是HTTP动词是POST。重要的是方法,而不是URL/参数。。。然后,为了避免用户输入相同的URL,我应该检查$\u服务器['REQUEST\u METHOD'],对吗?是的。无论是
GET-example.com/foo/bar/baz
还是
POST-example.com/foo/bar/baz
,服务器的反应都应该非常不同。POST是一种请求方法,一种HTTP动词。您不必向其中添加请求主体。就HTTP而言,这是一个非常好的POST请求。POST不等于正文中的数据,GET不等于URL查询参数。大多数人说,当请求有副作用且GET为只读时,应该使用POST。由于按钮是
Delete
,并且它在服务器中有副作用(不是幂等),因此不应通过URL-query访问。否,它不应是GET请求。不管参数是在URL中还是在请求体中,重要的是HTTP动词是POST。重要的是方法,而不是URL/参数。。。然后,为了避免用户输入相同的URL,我应该检查$\u服务器['REQUEST\u METHOD'],对吗?是的。无论是
GET-example.com/foo/bar/baz
还是
POST-example.com/foo/bar/baz
,服务器的反应都应该非常不同。稍微研究一下“RESTful”。谢谢你的回答,我发现有一个允许访问操作的
'verbs'
规则,所以我现在使用它,所以如果delete/etc操作来自于vía POST,或者被拒绝,就会被检查。通过这种方式,我可以将Yii的参数绑定from URL使用到我的操作中,并通过POST方法进行过滤。感谢您的回答,我发现有一个允许访问操作的
'verbs'
规则,所以我现在正在使用它,所以如果delete/etc操作来自于vía POST,或者被拒绝,则会对其进行检查。这样,我就可以使用Yii的参数绑定从URL绑定到我的操作中,并通过POST方法进行过滤。
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.');
    }
}