从验证引发错误 此路由不支持 GET 方法。支持的方法:开机自检。



我是laravel的新手。。有点被困在这个地方。为此尝试了许多解决方案,但都没有奏效,有类似的问题,但大多数没有解决,或适当的明显解决方案尚未发布(来自谷歌,stackoverflow等(

我定义了一个自定义路线

Route::post('/ComplaintGenerate', 'ComplaintsController@generate'); 

每当我以"POST"方法作为提交视图时

<form action="/ComplaintGenerate" method="POST" > 

在我的Complaintscontroller中没有任何验证规则,一切都很好,我可以保存数据。但当我通过请求或直接进行验证时,它会抛出错误Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException此路由不支持GET方法。支持的方法:POST

如果我删除验证,一切都会正常工作。我也试过用GET的方法但还是力作。如果能给我一点建议,我将不胜感激。

Web.route

Route::middleware(['auth'])->group(function(){
Route::post('/Complaint', 'ComplaintsController@find'); 
Route::post('/ComplaintGenerate', 'ComplaintsController@generate');
Route::post('/Complaint/{Complaint}', 'ComplaintsController@save_customer');
Route::resource('Complaints', 'ComplaintsController');
Route::resource('Occupancies', 'OccupanciesController');
Route::resource('Customers', 'CustomersController');
Route::resource('Services', 'ServiceController');
Route::resource('ServiceTeams', 'ServiceTeamController');
Route::get('/home', 'HomeController@index')->name('home');});

我的控制器:

public function generate(GenerateInitialComplaintRequest $request)
{  
$complaint = Complaint::find($request->complaint_id);
$complaint->update([
'complaint_date'=>$request->complaint_date,
'complaint_description'=>$request->complaint_description,   
]);
return redirect(route('Complaints.index')->with('complaint', Complaint::all()));           
}

我的观点:

<div class="container my-5">
<div class="col d-flex justify-content-center my-4">
<div class="card">
<div class="card-header">
<form action="/ComplaintGenerate" method="POST" >
@csrf
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-row">
<div class="form-group col-md-6">
<label for="complaint_id">Complaint Number</label>
<input type="text" class="form-control" id="complaint_id" name="complaint_id" value="{{$complaint->id}}" readonly >
</div>
<div class="form-group col-md-6">
<label for="complaint_date">Complaint Date</label>
<input type="text" class="form-control" id="complaint_date" name="complaint_date">
</div>
</div>
<div class="form-row">
<div class="form-group  col-md-12">
<label for="complaint_description">Complaint Description</label>
<textarea class="form-control" id="complaint_description" name="complaint_description" rows="5"></textarea>
</div>
</div>             
<div class="text-center">
<button type="submit" class="btn btn-primary">Save</button>                
</div>
</form>
</div>
</div>
</div>

显示表单的路径是什么?当验证失败时,Laravel使用GET方法重定向到它显示的路由。

我假设表单可能显示在ComplaintsControllerfind方法中,当验证失败时,会重定向到此路由,这就是引发错误的原因。

您还可以展示您的验证方法吗?您试图通过表格发送哪些数据?

我找到了Ankur Mishra和Aryal提到的解决方案,我们必须记住Aryal提到的,当验证失败时,Laravel使用GET方法重定向到它显示的路由。我在下面展示了我的表格

Route::post('/Complaint/{Complaint}', 'ComplaintsController@save_customer');

控制器方法:

public function save_customer($id)
{         
$complaint = Complaint::create([
'customer_id'=>$id
]);
// $complaint = Complaint::whereCustomer_id($id)->firstorfail();
return view('complaints.initial_complaint')->with('complaint', $complaint);            
}

"complaint.sinitial_complaint"是一个视图,它的形式给了我错误此路由不支持GET方法。支持的方法:POST提交时所以我将POST路由更改为GET:-

Route::middleware(['auth'])->group(function(){
//Route::resource('Complaints', 'ComplaintsController');
Route::get('/Complaint', 'ComplaintsController@find');      
Route::get('/Complaint/{Complaint}', 'ComplaintsController@save_customer');
Route::get('/ComplaintGenerate', 'ComplaintsController@generate');
Route::resource('Complaints', 'ComplaintsController');
Route::resource('Occupancies', 'OccupanciesController');
Route::resource('Customers', 'CustomersController');
Route::resource('Services', 'ServiceController');
Route::resource('ServiceTeams', 'ServiceTeamController');
Route::get('/home', 'HomeController@index')->name('home');

});

在视图中,我通过了GET作为隐藏方法

<form action="/ComplaintGenerate" method="POST" >
@csrf
@method('GET')
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<div class="form-row">
<div class="form-group col-md-6">
<label for="complaint_id">Complaint Number</label>
<input type="text" class="form-control" id="complaint_id" name="complaint_id" value="{{$complaint->id}}" readonly >
</div>
<div class="form-group col-md-6">
<label for="complaint_date">Complaint Date</label>
<input type="text" class="form-control" id="complaint_date" name="complaint_date">
</div>
</div>
<div class="form-row">
<div class="form-group  col-md-12">
<label for="complaint_description">Complaint Description</label>
<textarea class="form-control" id="complaint_description" name="complaint_description" rows="5"></textarea>
</div>
</div>             
<div class="text-center">
<button type="submit" class="btn btn-primary">Save</button>                
</div>
</form>

现在它正在为我工作。刚刚发布,所以如果有人可以使用它作为未来的参考

您应该添加

Route::get('/ComplaintGenerate', 'ComplaintsController@generate');
Route::post('/ComplaintGenerate', 'ComplaintsController@generate');

相关内容

最新更新