2

在 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>

路由.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();
    }
}
4

3 回答 3

4

确保您没有路线,例如Route::post带有位于您尝试到达的路线前面的参数的路线。

例如:

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

在这种情况下,无论您尝试向卡片路由发送什么,它都会始终命中该something 路由,因为它作为有效参数{something}进行拦截并触发. 将路线放在卡片路线下方,它应该可以工作。cardsSomethingControllersomething

于 2016-08-28T07:48:12.453 回答
0

MethodNotAllowedHttpException当没有找到匹配的路由(方法和 URI)时抛出,但是找到了一个匹配 URI 但没有匹配方法的路由。

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

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

  1. 从您的路线中删除参数:
Route::post('cards/notes','NotesController@store');
  1. 将参数添加到您的控制器:
    公共功能商店($card)
    {
        返回请求()->所有();
    }
于 2016-08-28T08:41:34.283 回答
0

我试图解决这个流明错误,我花了很多时间来解决这个问题。问题在于 laravel 本身。

有时,如果您有另一条路线,例如 GET device/{variable},laravel 会在第一条路线中停止...

所以你需要做的就是改变POST device路线POST device/add

这个链接对我帮助很大

于 2017-09-02T02:56:49.813 回答