0

我正在 Yii 中使用 REST。因此我使用 yiirestful 插件和 Backbone.JS。目前,我完全能够在整个 REST 中执行 POST 和 GET 请求。但是当我想更新一条记录时,我总是收到 403 禁止错误。我将解释我的尝试以及如何:

首先,我将我的收藏保存在 Backbone 中,如下所示:

Backbone.sync('update', this.collection);

现在我不确定这是否会起作用,但事实是任何 PUT 请求都会得到 403。

其次,因为我在一个模块中工作,所以我调整了 URLmanager 规则,如下所示:

    '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

我认为这个 url 之后需要一个 id,但是当我在数据中提供一个 id 应该足以让骨干网识别它是关于 PUT 请求/更新请求时。

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

问候,

4

1 回答 1

0

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

要么提供一个 ID,要么将规则修改为不需要 id,例如:

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

无论如何,由于您没有使用 id,我不确定为什么它在规则中开始?

于 2012-11-30T17:50:58.363 回答