Laravel多页面表单提交报错:PUT方法不被支持
Laravel多页面表单提交错误:PUT方法不支持
我是Laravel新手,正在开发一个多页面表单。第一个表单(员工信息页)可正常将数据插入数据库,但第二个表单(事件报告页)提交时出现错误:"The PUT method is not supported for this route. Supported methods: POST."。我了解过Session,但不确定是否适用于此类表单,希望得到问题解决的帮助。
控制器代码
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; class MultiformController extends Controller { public function ChooseLang() { return view('multiform.language'); } public function NameMentioned() { return view('multiform.name'); } public function ViewMentionName() { return view('multiform.mentionname'); } public function AddNameMentioned(Request $request) { $request->validate([ 'empname' => 'required', 'empnum' => 'required', ]); $query = DB::table('multiforms')->insert([ 'empname'=>$request->input('empname'), 'empnum'=>$request->input('empnum'), ]); return view('multiform.report'); } public function ReportPerson(Request $request) { return view('multiform.report'); } public function AddReportPerson(Request $request) { $request->validate([ 'incnam'=> 'required', 'incnum' => 'required', 'inctype'=> 'required', 'incday'=> 'required', 'incatt'=> 'required', 'incterm'=> 'required', 'inctdes'=> 'required', 'inncity'=> 'required', ]); $query = DB::table('multiforms')->insert([ 'empname'=>$request->input('empname'), 'empnum'=>$request->input('empnum'), 'incnam'=>$request->input('incnam'), 'incnum'=>$request->input('incnum'), 'inctype'=>$request->input('inctype'), 'incday'=>$request->input('incday'), 'incatt'=>$request->input('incatt'), 'incterm'=>$request->input('incterm'), 'inctdes'=>$request->input('inctdes'), 'inncity'=>$request->input('inncity'), ]); if ($query) { return back()->with('success', 'Data has been successfully inserted '); } else { return back()->with('fall', 'Something went wrong '); } } }
路由代码
<?php use Illuminate\Support\Facades\Route; use App\Http\Controllers\MultiformController; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('test'); }); /// multipage form Route::controller(MultiformController::class)->group(function(){ Route::get('/index', 'ChooseLang')->name('choose.lang'); Route::get('/MentionName', 'MentionName')->name('choose.lang'); Route::get('/name', 'NameMentioned')->name('name.mentioned'); Route::post('/add', 'AddNameMentioned')->name('addname.mentioned'); Route::get('/report', 'ReportPerson')->name('report.person'); Route::post('/addreport', 'AddReportPerson')->name('addreported.name'); }); Route::get('/dashboard', function () { return view('admin.index'); })->middleware(['auth','verified'])->name('dashboard'); require __DIR__.'/auth.php';
name.blade视图
<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Dashboard | Makassed Speak </title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta content="Premium Multipurpose Admin & Dashboard Template" name="description" /> <meta content="Themesdesign" name="author" /> <!-- App favicon --> <link rel="shortcut icon" href="{{ asset('backend/assets/images/favicon.ico') }}"> <!-- jquery.vectormap css --> <link href="{{ asset('backend/assets/libs/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.css') }}" rel="stylesheet" type="text/css" /> <!-- DataTables --> <link href="{{ asset('backend/assets/libs/datatables.net-bs4/css/dataTables.bootstrap4.min.css') }}" rel="stylesheet" type="text/css" /> <!-- Responsive datatable examples --> <link href="{{ asset('backend/assets/libs/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css') }}" rel="stylesheet" type="text/css" /> <!-- Bootstrap Css --> <link href="{{ asset('backend/assets/css/bootstrap.min.css') }}" id="bootstrap-style" rel="stylesheet" type="text/css" /> <!-- Icons Css --> <link href="{{ asset('backend/assets/css/icons.min.css') }}" rel="stylesheet" type="text/css" /> <!-- App Css--> <link href="{{ asset('backend/assets/css/app.min.css') }}" id="app-style" rel="stylesheet" type="text/css" /> <!-- App bootstrap--> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/bootstrap.tagsinput/0.8.0/bootstrap-tagsinput.css" > <!-- App toastr--> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.css" > <!-- App datepicker--> <link href="{{asset('backend/assets/libs/bootstrap-datepicker/css/bootstrap-datepicker.min.css')}}"> </head> <body> <div class="container"> <div class="row" style="margin-top:50px;"> <br> </div> </div> <form class="needs-validation" action="add" method="POST" novalidate=""> @csrf <div class="container"> <div class="step-one col-md-6 offset-md-3"> <div class="card"> <div class="card-header bg-secondary text-white">Emlpoyee Name</div> <div class="card-body"> <div class="row"> <div class="col-md-6"> <div class="mb-3"> <label for="validationCustom01" class="form-label">Employee Name </label> <input type="text" class="form-control" id="validationCustom01" name="empname" placeholder="" required=""> <div class="valid-feedback">Looks good!</div> </div> </div> <div class="col-md-6"> <div class="mb-3"> <label for="validationCustom02" class="form-label"> Employee #</label> <input type="text" class="form-control" id="validationCustom02" name="empnum" placeholder="" required=""> <div class="valid-feedback">Looks good!</div> </div> </div> </div> <button class="btn btn-primary" type="submit">Next</button> </div> </div> </div> </div> </form> <script src="{{asset('backend/assets/libs/jquery/jquery.min.js')}}"></script> <script src="{{asset('backend/assets/libs/bootstrap/js/bootstrap.bundle.min.js')}}"></script> <script src="{{asset('backend/assets/libs/metismenu/metisMenu.min.js')}}"></script> <script src="{{asset('backend/assets/libs/simplebar/simplebar.min.js')}}"></script> <script src="{{asset('backend/assets/libs/node-waves/waves.min.js')}}"></script> <script src="{{asset('backend/assets/libs/parsleyjs/parsley.min.js')}}"></script> <script src="{{asset('backend/assets/js/pages/form-validation.init.js')}}"></script> <script src="{{asset('backend/assets/js/app.js')}}"></script> </body> </html>
Report.blade视图
<!doctype html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Dashboard | Makassed Speak </title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta content="Premium Multipurpose Admin & Dashboard Template" name="description" /> <meta content="Themesdesign" name="author" /> <!-- App favicon --> <link rel="shortcut icon" href="{{ asset('backend/assets/images/favicon.ico') }}"> <!-- jquery.vectormap css --> <link href="{{ asset('backend/assets/libs/admin-resources/jquery.vectormap/jquery-jvectormap-1.2.2.css') }}" rel="stylesheet" type="text/css" /> <!-- DataTables --> <link href="{{ asset('backend/assets/libs/datatables.net-bs4/css/dataTables.bootstrap4.min.css') }}" rel="stylesheet" type="text/css" /> <!-- Responsive datatable examples --> <link href="{{ asset('backend/assets/libs/datatables.net-responsive-bs4/css/responsive.bootstrap4.min.css') }}" rel="stylesheet" type="text/css" /> <!-- Bootstrap Css --> <link href="{{ asset('backend/assets/css/bootstrap.min.css') }}" id="bootstrap-style" rel="stylesheet" type="text/css" /> <!-- Icons Css --> <link href="{{ asset('backend/assets/css/icons.min.css') }}" rel="stylesheet" type="text/css" /> <!-- App Css--> <link href="{{ asset('backend/assets/css/app.min.css') }}" id="app-style" rel="stylesheet" type="text/css" /> <!-- App bootstrap--> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/bootstrap.tagsinput/0.8.0/bootstrap-tagsinput.css" > <!-- App toastr--> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/latest/toastr.css" > <!-- App datepicker--> <link href="{{asset('backend/assets/libs/bootstrap-datepicker/css/bootstrap-datepicker.min.css')}}"> </head> <body> <br><br> <div class="container"> <div class="step-one col-md-6 offset-md-3"> <div class="card"> <div class="card-header bg-secondary text-white">Incident Reported on</div> <div class="card-body"> <form class="needs-validation" action="addreport" method="POST" novalidate=""> @csrf <div class="row"> <div class="col-md-6"> <div class="mb-3"> <label for="validationCustom01" class="form-label">REPORTED PERSON</label> <input type="text" class="form-control" name="incnam" id="validationCustom01" placeholder="" required=""> <div class="valid-feedback">Looks good!</div> </div> </div> <div class="col-md-6"> <div class="mb-3"> <label for="validationCustom02" class="form-label">REPORTED EMPLOYEE #</label> <input type="text" class="form-control" id="validationCustom02" name="incnum" placeholder="" required=""> <div class="valid-feedback">Looks good!</div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="mb-3"> <label for="validationCustom03" class="form-label">INCIDENT TYPE</label> <select class="form-select" name="inctype" id="validationCustom03" required=""> <option selected="" disabled="" value="">Choose...</option> <option>THEFT</option> <option>NON COMPLIANCE WITH COMPANY POLICY</option> <option>ABUSING POWER</option> <option>USING COMPANY PROPERTY FOR PERSONAL INTEREST</option> <option>NEGLIGENCE</option> </select> <div class="invalid-feedback">Please select a valid state.</div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="mb-3"> <label>INCIDENT DETAILS</label> <div> <textarea name="inctdes" required="" class="form-control" rows="5"></textarea> </div> </div> </div> </div> <div class="row"> <div class="col-md-12"> <div class="mb-3"> <label for="validationCustom03" class="form-label">INCIDENT CITY</label> <select class="form-select" id="validationCustom03" required=""> <option selected="" name="inncity" disabled="" value="">Choose...</option> <option>Beirut</option> <option>North</option> <option>South</option> </select> <div class="invalid-feedback">Please select a valid state.</div> </div> </div> </div> <div class="row"> <div class="col-md-6"> <div class="mb-4"> <label class="form-label">INCIDENT DATE</label> <div class="input-group" id="datepicker2"> <input type="text" name="incday" class="form-control" placeholder="dd M, yyyy" data-date-format="dd M, yyyy" data-date-container="#datepicker2" data-provide="datepicker" data-date-autoclose="true"> <span class="input-group-text"><i class="mdi mdi-calendar"></i></span> </div><!-- input-group --> </div> <div class="invalid-feedback">Please select a valid Date.</div> </div> <div class="col-md-6"> <div class="mb-4"> <div class="input-group"> <label class="form-label">UPLOAD ATTACHEMENT IF ANY</label> <input type="file" name="incatt" class="form-control" id="customFile"> </div> <div class="invalid-feedback">Please select a valid state.</div> </div> </div> </div> <div class="form-check mb-3"> <input class="form-check-input" name="incterm" type="checkbox" value="" id="invalidCheck" required=""> <label class="form-check-label" for="invalidCheck">I confirm that, all above provided information is correct.</label> <div class="invalid-feedback">You must agree before submitting.</div> </div> <div> <button class="btn btn-primary" type="submit">Submit form</button> </div> </form> </div> </div> </div> </div> <script src="{{asset('backend/assets/libs/jquery/jquery.min.js')}}"></script> <script src="{{asset('backend/assets/libs/bootstrap/js/bootstrap.bundle.min.js')}}"></script> <script src="{{asset('backend/assets/libs/metismenu/metisMenu.min.js')}}"></script> <script src="{{asset('backend/assets/libs/simplebar/simplebar.min.js')}}"></script> <script src="{{asset('backend/assets/libs/node-waves/waves.min.js')}}"></script> <script src="{{asset('backend/assets/libs/parsleyjs/parsley.min.js')}}"></script> <script src="{{asset('backend/assets/js/pages/form-validation.init.js')}}"></script> <script src="{{asset('backend/assets/js/app.js')}}"></script> <script src="{{asset('backend/assets/libs/bootstrap-datepicker/js/bootstrap-datepicker.min.js')}}"></script> </body> </html>
错误原因及修复方案
1. 核心错误原因
- 表单提交路径错误:第二个表单使用相对路径
action="addreport",当从/add页面跳转后,实际提交路径变为/add/addreport,该路由不存在,Laravel匹配错误路由导致方法不匹配。 - 跨页面数据丢失:第一个页面的员工信息未传递到第二个页面,且当前代码重复插入员工数据,逻辑错误。
- 表单元素属性错误:Report.blade中城市选择框的
name属性写在<option>标签上,而非<select>,导致无法获取该字段值。
2. 具体修复步骤
(1)使用命名路由修复提交路径
所有表单的action改用Laravel命名路由,避免相对路径问题:
- name.blade修改表单action:
<form class="needs-validation" action="{{ route('addname.mentioned') }}" method="POST" novalidate="">
相关产品推荐
相关产品推荐

