МетодNotAllowedHttpException в строке RouteCollection.php 218: 4

Я получаю MethodNotAllowedHttpException при отправке формы в laravel

Html-файл

<form method="POST" action="/cards/{{$card->id}}/notes"> <input name="_token" type="hidden" value="{{ csrf_token() }}"/> <textarea name="body" class="form-control"></textarea> <button type="submit">Add Note</button> </form> 

routes.php

 Route::post('cards/{card}/notes','NotesController@store'); 

NotesController.php

 namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; class NotesController extends Controller { public function store() { return request()->all(); } } 

Убедитесь, что у вас нет маршрута, скажите сообщение « Route::post с параметром, который находится перед маршрутом, который вы пытаетесь ударить.

Например:

 Route::post('{something}', 'SomethingController@index'); Route::post('cards/{card}/notes', 'NotesController@store'); 

В этом случае, независимо от того, что вы пытаетесь отправить на маршрут карты, он всегда попадает в какой- something маршрут, потому что {something} перехватывает cards как допустимый параметр и запускает SomethingController . Поместите что- something маршрутом ниже маршрута карты, и оно должно работать.

MethodNotAllowedHttpException вызывается, когда не найдено подходящего маршрута (метода и URI), но найден маршрут с соответствующим URI, но не соответствующий методу.

В вашем случае, я думаю, проблема заключается в том, что параметры URI отличаются между маршрутом и контроллером.

Вот две альтернативы, которые вы можете попробовать:

  1. Удалите параметр с вашего маршрута:
 Маршрут :: пост ( 'карты / ноты', 'NotesController @ магазин');
  1. Добавьте параметр в контроллер:
     публичный магазин функций ($ card)
     {
         return request () -> all ();
     }

Я попытался решить эту ошибку в просвете, и мне потребовалось довольно много времени, чтобы выяснить проблему. Проблема заключается в самом laravel.

Иногда, если у вас есть другой маршрут, например GET device / {variable}, laravel останавливается в этом первом маршруте …

Итак, что вам нужно сделать, это изменить маршрут POST device на POST device/add

Эта ссылка очень помогла мне