RouteCollection.php 行 218:4 中的 MethodNotAllowedHttpException

MethodNotAllowedHttpException in RouteCollection.php line 218:4

我在 laravel

中提交表单时会收到 MethodNotAllowedHttpException

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

在这种情况下,无论您尝试向 cards 路由发送什么,它总是会到达 something 路由,因为 {something} 正在拦截 cards 作为有效参数并且触发 SomethingController。 将 something 路由放在 cards 路由下方,它应该可以工作。

MethodNotAllowedHttpException没有找到匹配的路由(方法和URI),但是找到了匹配URI但不匹配方法的路由。

在你的情况下,我猜问题是因为 URI 参数在路由和控制器之间不同。

您可以尝试以下两种选择:

  1. 从您的路线中删除参数:
Route::post('cards/notes','NotesController@store');
  1. 将参数添加到您的控制器:
    public function store($card)
    {
        return request()->all();
    }

我已经尝试解决 lumen 中的这个错误,但我花了很多时间才弄清楚这个问题。 问题出在 laravel 本身。

Sometimes if you have another route like GET device/{variable}, laravel stops in this first route...

所以您需要做的是将路线 POST device 更改为 POST device/add

This link helped me a lot