如何修复 "MethodNotAllowedHttpException" 当我单击按钮以显示其他 table 上的数据时 select 选项作为参考

How to fix "MethodNotAllowedHttpException" when I click button to show data on other table which select option as reference

我有两个table,他们是 1. Class table 列,class_id,名称 2. 老师 table with column teacher_id, name, class_id

我想在同一页的table老师上显示老师姓名和列名blade这是index.blade.php当我选择select基于填充数据的选项时在 class_id table class 上。我已经使用 select 选项成功完成数据 class_id,

但是当我单击“显示”按钮并更改 select 选项上的数据时,我收到如下错误消息:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException No message

这是我在报告文件夹中的代码

index.blade.php

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <h4>Report List of Classroom</h4>
                </div>

                <div class="panel-body">
                    <form action="{{ route('reportshow') }}" method="post">
                        {{ csrf_field() }}
                        {{ method_field('patch') }}

                        @if ($errors->any())
                            <div class="alert alert-danger"><ul>
                                @foreach ($errors->all() as $error)
                                    <li>{{ $error }}</li>
                                @endforeach
                            </ul></div>
                        @endif

                    <select id="class_id" class="form-control" name="class_id" width="150">
                        <option value=""> -- Choose Classroom -- </option>
                        @foreach($classroom as $classroom)
                            <option value="{{ $classroom->class_id }}">{{ $classroom->name }}</option>
                        @endforeach
                    </select>
                    <br>
                    <button type="submit" class="btn btn-primary">Show</button>
                    </form>
                </div>

                <div>
                    {{ isset($class_id) ? $class_id : '' }}
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

====================================

在控制器上 ReportController.php

public function tampil(Request $request)
    { 
        $results = DB::select('select name from teacher where class_id = ?', $request['class_id']);
        return view('report.index', compact('results'));
    }

====================================

于 routes/web.php

Route::post('reportshow', 'ReportController@tampil')->name('reportshow');

我希望在同一页的 table 老师上显示带有列名的老师姓名 blade 这是 index.blade.php 当我选择 select 选项时基于填充数据在 class_id table class 上,但出现错误:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException No message

MethodNotAllowedHttpException 告诉您没有为您在表单中使用的方法定义路由。您定义的路由仅适用于 POST 方法:Route::post('reportshow', 'ReportController@tampil')->name('reportshow'); 而您的表单正在使用 PATCH 方法(通过使用 {{ method_field('patch') }})。

使用 POST 方法从表单中删除 {{ method_field('patch') }} 行到 post。

有关路由的更多信息:https://laravel.com/docs/5.6/routing

MethodNotAllowedHttpException表示定义的路由和你使用的路由不匹配或者类型不匹配。

在你的情况下,路线是:

Route::post('reportshow', 'ReportController@tampil')->name('reportshow');

而您正在使用的是:

<form action="{{ route('reportshow') }}" method="post">
  {{ csrf_field() }}
  {{ method_field('patch') }}

这里method_field('patch')这一行是用来覆盖patch的方法,但是路由是post类型的,这就是错误的原因。

要解决此问题,请将路由更改为:

Route::patch

或删除

{{ method_field('patch') }}

然后重试。

由于浏览器不理解 PATCH、PUT、DELETE 方法,所以您只能做一件事。它只理解 GET 和 POST。 将以下行设为:-

<form action="{{ route('reportshow') }}" method="patch">

并在后续行中添加以下行:-

<input type="hidden" name="_method" value="POST">

这只会让您通过,您不会收到以下错误。让我知道这是否解决了问题。