我正在使用Laravel 5.2构建RESTful API,并且我有一个AngularJS 1.5前端。我正在成功地编写服务以获取信息,但是当我将其传递给API时,我正在为数据库添加或发布任何内容。我尝试过进行一些搜索,但我不知道如何实际保存我发送API的数据。这是我到目前为止的尝试:
- 来自工厂的服务 -
addReceipt: function(request) {
return $http.post(api_url + "/rewards/receipts/add", request).then(function(results) {
console.log(results);
return results.data;
});
}
- 从控制器
$scope.submitReceipt = function() {
rewardsFactory.addReceipt($scope.model).then(function() {
console.log($scope.model);
toaster.pop({ type: 'success', title: 'Claim Submitted!', body: "Thanks! We'll take a look at your claim shortly.", showCloseButton: true });
});
};
- 从Laravel API路线
Route::post('rewards/receipts/add', 'Rewards\RewardsController@addReceipt');
- 从Laravel控制器
public function addReceipt(Request $request)
{
//Add the Receipt
DB::table('receipts')->insert(
['transaction_id' => $request->input('transactionID'),
'client_id' => $request->input('client_id'),
'location_id' => $request->input('location_id') ]
);
}
My Current Cors设置似乎对于至少一些流量来说效果不错,所以我不认为这是问题,但我还是不确定我做错了什么。
答案 0 :(得分:1)
请注意,$http
默认情况下不会发送表单编码数据,而是在请求正文中发送application/json
。
我不会使用laravel进行任何工作,但是如果你检查$_POST
,你会看到它是空的,所以$request->input
也可能是空的。
在php中,您可以使用以下方式访问响应正文:
json_decode(file_get_contents('php://input')[,true/*optional to convert to array*/])
我相信json_decode($request->getContent())
会在laravel中做同样的事情
另一种方法是使用以下$http
设置从文档中发送表单编码数据
.controller(function($http, $httpParamSerializerJQLike) {
//...
$http({
url: myUrl,
method: 'POST',
data: $httpParamSerializerJQLike(myData),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
});
});
您还可以在运行块中设置$http.defaults
,以便将所有帖子或结果发送为x-www-form-urlencoded
,而不必为每次使用添加配置