Как исправить «MethodNotAllowedHttpException», когда я нажимаю кнопку, чтобы показать данные в другой таблице, которая выбирает опцию в качестве ссылки - PullRequest
1 голос
/ 21 мая 2019

у меня две таблицы, они 1. Таблица классов со столбцом, class_id, именем 2. Таблица учителя с колонкой teacher_id, name, class_id

Я хочу показать имя учителя с именем столбца на учителе таблицы в одном блейде страницы, это index.blade.php, когда я выбираю опцию выбора с заполненными данными на основе класса таблицы class_id. Я уже успешно обработал данные class_id с параметром выбора,

enter image description here но когда я нажал кнопку Показать и изменил данные в опции выбора, я получаю сообщение об ошибке, подобное этому:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Нет сообщения

Это мой код в папке отчетов

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'));
    }

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

на маршрутах / web.php

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

Я ожидаю показать имя учителя с именем столбца на учителе таблицы в одном блейде страницы. Это index.blade.php, когда я выбираю опцию выбора с заполненными данными на основе класса таблицы class_id, но получаю ошибку:

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException Нет сообщения

enter image description here

Ответы [ 3 ]

1 голос
/ 21 мая 2019

MethodNotAllowedHttpException сообщает, что для метода, который вы используете в своей форме, не определен маршрут. Определенный вами маршрут доступен только для POST методов: Route::post('reportshow', 'ReportController@tampil')->name('reportshow');, пока ваша форма использует метод PATCH (с помощью {{ method_field('patch') }}).

Удалите эту строку {{ method_field('patch') }} из формы для публикации, используя метод POST.

Подробнее о маршрутизации: https://laravel.com/docs/5.6/routing

0 голосов
/ 21 мая 2019

Поскольку браузер не понимает метод PATCH, PUT, DELETE, вы можете сделать одну вещь.Он понимает только GET и POST.Сделайте следующую строку как: -

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

И в следующей строке введите следующую строку: -

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

Это просто пропустит вас, и вы не получитеследующая ошибка.Дайте мне знать, если это решит проблему.

0 голосов
/ 21 мая 2019

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') }}

и попробуйте снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...