我在Yii中使用REST。因此我使用yiirestful插件和Backbone.JS。目前,我完全可以在整个REST中执行POST和GET请求。但是当我想要更新记录时,我总是得到403禁止错误。我将解释我尝试过的内容以及如何:
首先,我将这个集合保存在Backbone中,如下所示:
Backbone.sync('update', this.collection);
现在我不确定这是否会起作用,但事实是任何PUT请求都是403.
其次,因为我在一个模块中工作,所以我调整了URL管理器规则:
'contentManagement/api/<controller:\w+>'=>array('contentManagement/<controller>/restList', 'verb'=>'GET'),
'api/<controller:\w+>'=>array('<controller>/restList', 'verb'=>'GET'),
'api/<controller:\w+>/<id:\w+>'=>array('<controller>/restView', 'verb'=>'GET'),
'api/<controller:\w+>/<id:\w+>/<var:\w+>'=>array('<controller>/restView', 'verb'=>'GET'),
array('contentManagement/<controller>/restCreate', 'pattern'=>'contentManagement/api/<controller:\w+>', 'verb'=>'POST'),
array('<controller>/restUpdate', 'pattern'=>'contentManagement/api/<controller:\w+>/<id:\d+>', 'verb'=>'PUT'),
array('<controller>/restUpdate', 'pattern'=>'contentManagement/api/<controller:\w+>/<id:\d+>', 'verb'=>'PUT'),
array('<controller>/restDelete', 'pattern'=>'api/<controller:\w+>/<id:\d+>', 'verb'=>'DELETE'),
array('<controller>/restCreate', 'pattern'=>'contentManagement/api/<controller:\w+>', 'verb'=>'POST'),
array('<controller>/restCreate', 'pattern'=>'contentManagement/api/<controller:\w+>/<id:\w+>', 'verb'=>'POST'),
可能是导致问题的原因。但是我并没有深入研究这个规则..我的做法与POST请求的做法相同,但无论我尝试它还是给出了403。
第三,我将提供我的请求信息:
PUT http://pimtest.php/Yii/trackstar/contentManagement/api/SidebarWidgetsUsed/
403 Forbidden
38ms
我认为在这个网址之后需要一个id,但是当我在数据中提供一个id应该足以让骨干识别它是关于PUT请求/更新请求时。
我不知道在哪里可以进一步查看我的代码..我知道这是一个复杂的故事,所以任何最小的建议都值得赞赏!
格尔茨,
答案 0 :(得分:0)
您有两个(相同的)规则适用于PUT,正如您所说,它们需要一个ID。如果没有ID,则没有任何规则会匹配PUT请求。
提供ID,或修改规则以不需要id,例如:
array('<controller>/restUpdate', 'pattern'=>'contentManagement/api/<controller:\w+>', 'verb'=>'PUT'),
在任何情况下,由于你没有使用id,我不确定为什么它会在规则中启动?