我的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;
});
列表工作只是finde,但锁不起作用。控制台打印:
PATCH /api/users 405 (Method Not Allowed)
我像这样调用它
$scope.lock = function(user){
user.$lock();
}
在错误消息中,我看到了网址/api/users
,而不是/api/users/2/lock
。这是正常的行为吗?当然,列表除了/api/users
之外/api/users/{slug}/lock
上仅允许GET请求和PATCH请求。
为什么/ api / users被调用而不是/ api / users / {slug} / lock的任何想法。任何想法如何解决这个问题?
答案 0 :(得分:4)
当你调用$lock
时,angular不知道你打算像以前一样调用相同的url,还有一些额外的path元素。此外,角度无法知道:id
param的值是什么。
让角度知道锁定:
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
}
);