Slim,Postman和AngularJs:$ app-> request-> getBody()vs $ app-> request-> post()

时间:2015-01-09 11:19:09

标签: angularjs rest slim postman

我是初学者。我在客户端编写了一个由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()获取?

3 个答案:

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

就是这样,它会起作用。