Slim、Postman 和 AngularJs:$app->request->getBody() 与 $app->request->post()
Slim, Postman and AngularJs : $app->request->getBody() vs $app->request->post()
我是初学者。我在客户端编写了一个由 AngularJs GUI 和服务器端的 PHP API 组成的测试应用程序。
这是处理请求的 angular 服务
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(); 捕捉 post 吗?在这两种情况下?为什么来自 Angular 的 post 只能通过 $app->request->getBody() 捕获?
$app->request->post()
方法检索在 application/x-www-form-urlencoded
请求中提交的 key/value 数据。如果请求使用不同的内容类型(例如 application/json
),您可以使用 $app->request->getBody()
方法检索原始请求主体并根据需要对其进行解码。如果您还有其他问题,请告诉我。
谢谢 Josh..你的回答对我有用。
要遵循的步骤:
1.You 需要在原始选项卡下以 json 格式发送请求,如下所示:
{"username":"admin","password":"admin"}
2.You需要在headers.
中设置Content-Type
到application/json
就是这样,它会起作用。
您仍然可以使用
$post_b = $app->request->post()
苗条。
只要您从 html 表单 (AngularJS) 调用此 REST 服务,将数据作为格式化的表单值而不是 JSON 传递。
如果在 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格式的数据
我是初学者。我在客户端编写了一个由 AngularJs GUI 和服务器端的 PHP API 组成的测试应用程序。
这是处理请求的 angular 服务
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(); 捕捉 post 吗?在这两种情况下?为什么来自 Angular 的 post 只能通过 $app->request->getBody() 捕获?
$app->request->post()
方法检索在 application/x-www-form-urlencoded
请求中提交的 key/value 数据。如果请求使用不同的内容类型(例如 application/json
),您可以使用 $app->request->getBody()
方法检索原始请求主体并根据需要对其进行解码。如果您还有其他问题,请告诉我。
谢谢 Josh..你的回答对我有用。
要遵循的步骤:
1.You 需要在原始选项卡下以 json 格式发送请求,如下所示:
{"username":"admin","password":"admin"}
2.You需要在headers.
中设置Content-Type
到application/json
就是这样,它会起作用。
您仍然可以使用
$post_b = $app->request->post()
苗条。
只要您从 html 表单 (AngularJS) 调用此 REST 服务,将数据作为格式化的表单值而不是 JSON 传递。 如果在 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格式的数据