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

Laravel路由错误:GET方法不支持/produk/index,请求协助解决

Laravel路由方法不支持错误解决

错误信息

The GET method is not supported for route produk/index. Supported methods: POST.

用户提供的代码

web.php 路由配置

<?php

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\LoginController;
use App\Http\Controllers\ProdukController;
use App\Http\Controllers\SupplierController;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/

Route::get('/home', function () {
    return view('partials/main');})->middleware('auth');


Route::get('/login', [LoginController::class, 'index'])->name('login')->middleware('guest');
Route::post('/login', [LoginController::class, 'authenticate']);
Route::get('/logout', [LoginController::class, 'logout']);

Route::get('/produk/data', [ProdukController::class, 'show'])->name('produk.data');
Route::post('/produk/index', [ProdukController::class,'index'])->name('produk.index');
Route::get('/supplier/data', [SupplierController::class, 'index'])->name('supplier.data');

ProdukController.php 控制器代码

<?php

namespace App\Http\Controllers;

use App\Models\Produk;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class ProdukController extends Controller
{
    public function show() {

    return view('kategori.kategori');
    }
    public function index(Request $request)
    {
        // dd($request);
        $ValidateData = $request->validate([
        'nama_produk' => ['required','max:255'],
        'harga_beli' => ['required'],
        'harga_jual' => ['required'],
        'stok' => ['required']

    ]);
    Produk::create($ValidateData);

        return view('kategori.index')->with('succes');
    }
};

index.blade.php 视图代码

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
    <link rel="stylesheet" href="{{ asset('css/bootstrap.min.css') }}">
    <link rel="stylesheet" href="{{ asset('css/style.css') }}">

    <title>Form Produk</title>
  </head>
  <body>
    {{-- @foreach ($produks as $produk ) --}}

    {{-- @endforeach --}}
      <div class="col-6 mx-auto">
        <div class="container bg-white">
                     <form action="/produk/index" method="POST">
                @csrf
        <div class="mb-3">
            <label for="exampleFormControlInput1" class="form-label">Nama Produk</label>
            <input class="form-control" name="nama_produk" id="exampleFormControlInput1" placeholder="nama produk">
          </div>
        <div class="mb-3">
            <label for="exampleFormControlInput1" class="form-label">Harga Beli</label>
            <input class="form-control" name="harga_beli" id="exampleFormControlInput1" placeholder="harga beli">
          </div>
        <div class="mb-3">
            <label for="exampleFormControlInput1" class="form-label">Harga Jual</label>
            <input class="form-control" name="harga_jual" id="exampleFormControlInput1" placeholder="harga jual">
          </div>

        <div class="mb-2">
            <label for="exampleFormControlInput1" class="form-label">Stok</label>
            <input class="form-control" name="stok" id="exampleFormControlInput1" placeholder="stok">
          </div>
          <button onclick="" class="btn btn-success mt-3 mx-auto mb-3 text-center" type="submit"><i class="bi bi-plus-lg"></i> Tambah</button>
        </form>
        </div>
        </div>


    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.2/dist/umd/popper.min.js" integrity="sha384-IQsoLXl5PILFhosVNubq5LC7Qb9DXgDA9i+tQ8Zj3iwWAwPtgFTxbJ8NT4GN1R8p" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.min.js" integrity="sha384-cVKIPhGWiC2Al4u+LWgxfKTRIcfu0JTxR+EQDz/bgldoEyl4H0zUF0QKbrJ0EcQF" crossorigin="anonymous"></script>

  </body>
</html>
  </body>
</html>

问题原因

  1. 路由配置错误:将展示表单的路由设置为POST方法,但浏览器访问表单页面发送的是GET请求,导致方法不匹配报错。
  2. 控制器方法职责混乱:违背Laravel常规约定,用index方法处理表单提交(创建数据),而非展示资源列表。
  3. 提交后返回逻辑不合理:直接返回视图不符合Post/Redirect/Get(PRG)模式,会导致用户刷新页面重复提交数据。

解决方案

1. 修正路由配置

调整路由,用GET路由展示表单,新增POST路由处理提交,遵循Laravel命名规范:

// web.php
Route::get('/produk/index', [ProdukController::class,'create'])->name('produk.create');
Route::post('/produk', [ProdukController::class,'store'])->name('produk.store');
// 保留原有其他路由
Route::get('/produk/data', [ProdukController::class, 'show'])->name('produk.data');
Route::get('/supplier/data', [SupplierController::class, 'index'])->name('supplier.data');

2. 调整控制器方法

拆分职责,新增create方法展示表单,store方法处理数据创建,采用重定向避免重复提交:

<?php

namespace App\Http\Controllers;

use App\Models\Produk;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller;

class ProdukController extends Controller
{
    public function show() {
        return view('kategori.kategori');
    }

    // 展示创建产品的表单
    public function create()
    {
        return view('kategori.index');
    }

    // 处理表单提交,创建产品数据
    public function store(Request $request)
    {
        $ValidateData = $request->validate([
            'nama_produk' => ['required','max:255'],
            'harga_beli' => ['required'],
            'harga_jual' => ['required'],
            'stok' => ['required']
        ]);
        
        Produk::create($ValidateData);

        // 重定向回表单页面,并携带成功提示
        return redirect()->route('produk.create')->with('success', '产品添加成功');
    }
};

3. 更新视图的表单提交地址

将表单action改为路由名称,避免硬编码路径:

<form action="{{ route('produk.store') }}" method="POST">
    @csrf
    <!-- 原有表单内容保持不变 -->
</form>

4. 新增成功提示(可选)

在视图中添加提示信息,反馈操作结果:

<div class="col-6 mx-auto">
    @if(session('success'))
        <div class="alert alert-success mb-3">
            {{ session('success') }}
        </div>
    @endif
    <div class="container bg-white">
        <!-- 表单内容 -->
    </div>
</div>

内容的提问来源于stack exchange,提问作者Daffa naufas Setiawan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 10:23:11