我正在为Laravel创建一个API。我使用PUT方法更新数据。
我使用PUT方法向Postman发送数据。在我的控制器中,我得到一个空数组。如何访问传递的数据?
在我的路线中,我有:
Route::put('vehicletypes/{id}','API\VehicletypeController@update');
在我的控制器中:
public function update(Request $request, $id){
print_r($request->all()); exit;
}
如何获取PUT方法传递的数据?
你得到空的回应,因为PHP对PUT
有一些安全限制。但是Laravel有一个解决方法。
所以,要解决这个问题,你必须发送一个来自Postman的POST
请求,而POST
param __method
的值为PUT
。它应该工作。
Laravel作弊因为html表单只支持GET和POST,但它确实理解真正的PUT / PATCH请求。
问题看起来像Symfony,如果它是multipart / form-data,它无法解析数据,作为使用x-www-form-urlencoded内容处置的替代尝试。
public function putUpdate(Request $request, $id){
print_r($request->all()); exit;
}
并改变路线,
Route::put('vehicletypes/{id}','API\VehicletypeController@putUpdate');
为什么没有人在第一次放置方法领域给出明确的解释
{{method_field('put')}}
因为您的路由器uri是使用命令显示的
php artisan router:list
更新方法是put / patch所以先添加
{{method_field('put')}}
你表单中的字段应该是相同的
<form action="{{route('posts.update',$post->id)}}" method="post">
添加csrf_toke表单后将正常工作。最终的形状如下。
<form action="{{route('posts.update',$post->id)}}" method="post" >
{{method_field('put')}}
<input type="hidden" name="_token" value="{{csrf_token()}}">
<!-- Name input-->
<div class="form-group">
<label class="col-md-3 control-label" for="name">Title</label>
<div class="col-md-9">
<input id="name" name="title" type="text" value="{{$post->title}}" class="form-control">
</div>
</div>
<!-- Message body -->
<div class="form-group">
<label class="col-md-3 control-label" for="body">
Body</label><br>
<div class="col-md-9">
<textarea class="form-control" id="message" name="body" rows="5">
{{$post->body}}
</textarea>
</div>
</div>
<!-- Form actions -->
<div class="form-group">
<div class="col-md-9 text-right col-md-offset-3">
<button type="submit" class="btn btn-success btn-lg">Update</button>
<a href="{{Route('posts.index')}}" type="button" class="btn btn-primary btn-lg">Cancel</a>
</div>
</div>
</form>