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が返されます.

3 番目に、リクエスト情報を提供します。

PUT http://pimtest.php/Yii/trackstar/contentManagement/api/SidebarWidgetsUsed/

403 Forbidden
        38ms

このURLの後にIDが必要だと思いますが、データにIDを指定すると、バックボーンがPUTリクエスト/更新リクエストについて認識できるようにするのに十分なはずです。

コードのどこを調べればよいかわかりません。複雑な話だと理解していますので、最小限のアドバイスをいただければ幸いです。

グリーツ、

4

1 に答える 1

0

PUT に適用される 2 つの (同一の) ルールがあり、おっしゃる通り、ID が必要です。ID がないと、どのルールも PUT 要求に一致しません。

ID を指定するか、ルールを変更して ID を必要としないようにします。例:

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

いずれにせよ、id を使用していないため、開始するルールに含まれている理由がわかりません。

于 2012-11-30T17:50:58.363 に答える