403使用yiirestfull插件和Backbone.JS禁止错误PUT请求

时间:2012-11-30 15:36:52

标签: rest backbone.js yii

我在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请求/更新请求时。

我不知道在哪里可以进一步查看我的代码..我知道这是一个复杂的故事,所以任何最小的建议都值得赞赏!

格尔茨,

1 个答案:

答案 0 :(得分:0)

您有两个(相同的)规则适用于PUT,正如您所说,它们需要一个ID。如果没有ID,则没有任何规则会匹配PUT请求。

提供ID,或修改规则以不需要id,例如:

    array('<controller>/restUpdate', 'pattern'=>'contentManagement/api/<controller:\w+>', 'verb'=>'PUT'),

在任何情况下,由于你没有使用id,我不确定为什么它会在规则中启动?