你好:)我使用Laravel 4中内置的RESTful API与Angular结合使用,以便在前端进行繁重的工作。
目的是能够创建一个新的项目'在数据库中通过将表单数据POST到API(包括文件)。用户也可以使用PUT / PATCH以相同的方式编辑项目。
无论出于何种原因,我可以POST数据(使用$ http)并且工作正常,但是如果我使用PUT,则Laravel不会收到任何数据。我也尝试过PATCH。数据肯定是通过$ http发送的,您可以在此处看到:http://paste.laravel.com/1alX/raw
我可以说Laravel通过回显$ input变量来获取/处理任何数据。
我不确定这是Angular不以正确方式发送数据的问题,还是Laravel没有正确接收/处理数据的问题。
Javascript(稍微简化):
var formdata = new FormData();
// Unfortunately we cant just walk through the data with a FOR because the data is an object, not an array – We have to be explicit
// If data exists THEN add data to FormData ELSE do nothing
formdata.append('title', $scope.item.title);
formdata.append('description', $scope.item.description);
formdata.append('image', $scope.item.image);
formdata.append('tags', $scope.item.tags);
formdata.append('priority', $scope.item.priority);
edititem: function(formdata) {
// Edits a particular list
// id: the ID of the list to edit
// data: the edited list object
var promise = $http({
method: 'PUT',
url: 'http://mamp.local/api/v1/items/64',
headers: { 'Content-Type': undefined },
data: formdata,
transformRequest: angular.identity
})
.error(function(data, status, headers, config) {
debug(data, 'API FAIL - edit item');
return data;
})
.success(function(response){
debug(response.data, 'API Success - edit item');
return response.data;
});
return promise;
},
PHP:
/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update($id)
{
// Try and store the new List
$item = $this->itemRepo->updateitem($id, $this->user, Input::all());
// Lets check if we have any validation errors
if (count($item->errors()))
{
return Response::json(['errors' => $item->errors()->all()], 400);
}
// No errors
else
{
return Response::json(['id' => $item->id], 200);
}
}
/**
* Updates the item
*
* @param int $id the item ID
* @param User $user
* @param array $input
*
* @return item the item
*/
public function updateitem($id, User $user, $input)
{
// Grab the item
$item = $this->finditem($id, $user);
// Fill item with new input
$item->fill($input);
// Do we have an image?
if (Input::hasFile('image'))
{
// Handle resizing of the image
$item->image = $this->imageManipulator->resize($this->imageSizes, $this->imageDir, Input::file('image'));
}
// Try and save the item
if ($item->save())
{
// item saved, save the tags
$this->tagRepo->saveTags($input['tags'], $item, $user);
}
// Return the item
return $item;
}
我希望这是足够的信息,如果需要澄清,请告诉我。
Fankoo! :)
答案 0 :(得分:0)
你为什么这样做:headers: { 'Content-Type': undefined }
?
应为headers: { 'Content-Type': 'application/json' }
如果Laravel没有将Content-Type视为application / json,它将无法正确抓取你的json帖子。