Php 从验证抛出错误,此路由不支持GET方法。支持的方法:POST。”;

Php 从验证抛出错误,此路由不支持GET方法。支持的方法:POST。”;,php,laravel,validation,laravel-5,eloquent,Php,Laravel,Validation,Laravel 5,Eloquent,我是拉雷维尔的新手,有点被困在这个地方。为此尝试了许多解决方案,但没有一个有效,有类似的问题,但大多数尚未解决,或适当的明显解决方案尚未发布(来自谷歌、stackoverflow等) 我已经确定了一条定制路线 Route::post('/ComplaintGenerate', 'ComplaintsController@generate'); 每当我以“POST”方法提交视图时 <form action="/ComplaintGenerate" method="POST" >

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

我已经确定了一条定制路线

Route::post('/ComplaintGenerate', 'ComplaintsController@generate'); 
每当我以“POST”方法提交视图时

<form action="/ComplaintGenerate" method="POST" > 
我的控制器:

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>

@csrf
@如果($errors->any())
    @foreach($errors->all()作为$error)
  • {{$error}}
  • @endforeach
@恩迪夫 投诉号码 投诉日期 投诉描述 拯救

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

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


你能不能也展示一下你的验证方法和你想通过表格发送的数据?

我找到了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);            
}
“投诉。最初的投诉”是一种观点,它的形式让我产生了错误 此路由不支持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>

@csrf
@方法('GET')
@如果($errors->any())
    @foreach($errors->all()作为$error)
  • {{$error}}
  • @endforeach
@恩迪夫 投诉号码 投诉日期 投诉描述 拯救
而现在,它正在使我工作。。刚刚发布,所以如果有人将来可以使用它作为参考

您应该添加

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

当它抛出错误时,检查浏览器中的url。当我检查带有上述错误的表单验证时,显示questionurl中的url仍然与上一个路由相同,并且当我根据您提供的路由填写所有详细信息时:route::post('/Complaint/{Complaint}','ComplaintsController@save_customer');这是邮寄请求。拉威尔走这条路。这就是为什么会出现错误。显示表单的路径是通过route::post('/Complaint/{Complaint}','ComplaintsController@save_customer');
Route::get('/ComplaintGenerate', 'ComplaintsController@generate');
Route::post('/ComplaintGenerate', 'ComplaintsController@generate');