【问题标题】:From validation Throws error The GET method is not supported for this route. Supported methods: POST."从验证引发错误此路由不支持 GET 方法。支持的方法:POST。”
【发布时间】:2020-06-11 04:44:15
【问题描述】:

我是 laravel 的新手..有点卡在这个地方。为此尝试了许多解决方案,但尚未奏效,有类似的问题但大多数未解决,或尚未发布适当的明显解决方案(来自 google,stackoverflow ..etc)

我已经定义了一条自定义路线

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

每当我使用“POST”方法提交视图时

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

在我的投诉控制器中没有任何验证规则,一切正常,我可以保存数据。但是当我通过请求或直接进行验证时,它会抛出错误 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>

【问题讨论】:

  • 当它抛出错误时,检查浏览器中的url。
  • 并显示有问题的网址
  • 当我检查表单验证127.0.0.1:8000/Complaint/2 时,url 保持与以前的路由相同,并出现上述错误,当我填写所有详细信息时,我得到127.0.0.1:8000/ComplaintGenerate
  • 根据您提供的相关路线:Route::post('/Complaint/{Complaint}', 'ComplaintsController@save_customer');
  • 是post请求。 Laravel 走这条路。所以这就是你得到错误的原因。

标签: php laravel validation laravel-5 eloquent


【解决方案1】:

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

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

您能否也展示您的验证方法以及您试图通过表单发送哪些数据?

【讨论】:

  • 展示表单的路径是通过Route::post('/Complaint/{Complaint}', 'ComplaintsController@save_customer');
【解决方案2】:

我找到了 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);            
}

'complaints.initial_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>

现在它对我有用..刚刚发布所以如果有人可以使用它以供将来参考

【讨论】:

    【解决方案3】:

    你应该添加

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

    【讨论】:

      猜你喜欢
      • 2019-12-24
      • 2020-09-04
      • 1970-01-01
      • 2021-06-17
      • 2020-05-15
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      相关资源
      最近更新 更多