You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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="">
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 08:45:28