2

私の REST API は、この種の要求を受け入れるように構成されています

public function lockUserAction($slug)
{} // "lock_user"     [PATCH] /users/{slug}/lock

パッチリクエストを

/api/users/2/lock

id=2 のユーザーをロックします。これは angular.js 内の私の残りのサービスです

angular.module('UserService',['ngResource']).factory('User', function($resource){
    var User = $resource('/api/users/:id',
        {},
        { 
          list: { method: 'GET' },
          lock: { method: 'PATCH' }
        }
    );   
    return User;
});

リストは検索だけで機能しますが、ロックは機能しません。コンソールに次のように出力されます。

PATCH /api/users 405 (Method Not Allowed) 

私はこのようにそれを呼び出します

$scope.lock = function(user){
    user.$lock();
}

/api/usersエラー メッセージに、 の代わりにURL が表示されます/api/users/2/lock。これは正常な動作ですか?もちろん、 GET リクエストのみを除き、 PATCH リクエストは on/api/usersのみで許可されていません/api/users/{slug}/lock

/api/users/{slug}/lock ではなく /api/users が呼び出される理由。これを修正する方法はありますか?

4

1 に答える 1

4

angular を呼び出す$lockと、追加のパス要素を使用して、以前と同じ URL を呼び出すつもりであることがわかりません。:idまた、angularがparamの値を知る方法はありません。

ロックについてAngularに知らせるよりも:

var User = $resource('/api/users/:id/:action', //add param to the url
        {}, 
        { 
          list: { method: 'GET' },
          lock: { method: 'PATCH',params:{action:"lock",id:"@id"}} //set param value, so angular knows where to send request, @id refers to user id in json representation of user
        }
    ); 
于 2013-04-13T23:17:32.827 に答える