我是初学者。我在客户端编写了一个由AngularJs GUI构成的测试应用程序,在服务器端编写了一个PHP API。
这是处理请求的角度服务
myApp.factory('Book', ['$resource', 'API_URL', function($resource, API_URL){
return $resource(API_URL + '/books/:bookId', {bookId: '@bookId'}, {
get: { method: 'GET', isArray:true },
update: { method: 'PUT'},
save: { method: 'POST'},
delete: {method:'DELETE'},
});
}]);
当我从Angular应用程序提交书籍时,我可以使用
在Slim中捕获POST$post_a = json_decode($app->request->getBody());
//$post_b = $app->request->post(); //this would be empty
当我使用Postman并执行POST时,我可以使用
在Slim中捕获POST//$post_a = json_decode($app->request->getBody()); // this would be empty
$post_b = $app->request->post();
我不明白为什么会有这种差异。你能解释一下吗?
我是不是只想使用$ app-> request-> post();在这两种情况下?为什么来自Angular的帖子只能通过$ app-> request-> getBody()获取?
答案 0 :(得分:5)
$app->request->post()
方法检索application/x-www-form-urlencoded
请求中提交的键/值数据。如果请求使用不同的内容类型(例如application/json
),您可以使用$app->request->getBody()
方法检索原始请求正文并根据需要对其进行解码。如果您还有其他问题,请与我们联系。
答案 1 :(得分:0)
你仍然可以使用
$ post_b = $ app-> request-> post()
in Slim。
只要您通过将数据作为格式化而不是JSON格式传递来从html表单(AngularJS)调用此REST服务。 如果在AngularJS中你有JSON格式的数据,你必须先将它翻译成表格。以下是如何调用此REST服务的示例:
Object.toparams = function ObjecttoParams(obj) {
var p = [];
for (var key in obj) {
p.push(key + '=' + encodeURIComponent(obj[key]));
}
return p.join('&');
};
$http({
method: 'POST',
url: url,
data: Object.toparams(myobject),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
myobject是将要创建的JSON格式的数据
答案 2 :(得分:-1)
谢谢Josh ..你的答案对我有用。
要遵循的步骤:
1.您需要在原始标签下以json格式发送请求,如下所示:
{"username":"admin","password":"admin"}
2.您需要在标题中将Content-Type
设置为application/json
。
就是这样,它会起作用。