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();
}

在错误消息中,我看到的是 url/api/users而不是/api/users/2/lock. 这是正常行为吗?/api/users当然,仅列出 GET 请求和 PATCH 请求除外/api/users/{slug}/lock

为什么调用 /api/users 而不是 /api/users/{slug}/lock 的任何想法。任何想法如何解决这一问题?

4

1 回答 1

4

当您调用$lockangular 时,不知道您打算调用与以前相同的 url,并带有一些额外的路径元素。角度也无法知道:id参数的值是什么。

比让角度知道锁定:

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 回答