RouteCollection.php第218:4行中的MethodNotAllowedHttpException

时间:2016-08-27 17:23:13

标签: php laravel-5.3

在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();
    }
}

3 个答案:

答案 0 :(得分:4)

请确保您没有路线,例如Route::post的参数位于您尝试击中的路线前面。

例如:

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

在这种情况下,无论您尝试向卡路由发送什么内容,它都会始终点击something路由,因为{something}拦截cards作为有效参数并触发SomethingController。 将something路线放在卡片路线下方,它应该有效。

答案 1 :(得分:0)

如果找不到匹配的路由(方法和URI),则会抛出

MethodNotAllowedHttpException,但找到了匹配URI但不匹配方法的路由。

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

您可以尝试以下两种方法:

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

答案 2 :(得分:0)

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

  

有时如果您有另一条路线,例如GET设备/ {变量},则laravel会在第一条路线中停止......

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

This link helped me a lot