RouteCollection.php 第 218 行 Laravel 5.2 中的 MethodNotAllowedHttpException

MethodNotAllowedHttpException in RouteCollection.php line 218 Laravel 5.2

我必须通过浏览器访问 PUT 路由并获取 json 对象,但 L5.2 向我显示 MethodNotAllowedHttpException 错误我该怎么做才能解决这个问题?

我的URLhttp://laravel5.restapi.dev/a?_method=put

我的route:list

route.php

<?php

Route::put('/a', function () {
   return view('welcome');
});

输出

Whoops, looks like something went wrong.

MethodNotAllowedHttpException in RouteCollection.php line 218:
in RouteCollection.php line 218
at RouteCollection->methodNotAllowed(array('PUT')) in RouteCollection.php line 205
at RouteCollection->getRouteForMethods(object(Request), array('PUT')) in RouteCollection.php line 158
at RouteCollection->match(object(Request)) in Router.php line 821
at Router->findRoute(object(Request)) in Router.php line 691
at Router->dispatchToRoute(object(Request)) in Router.php line 675
at Router->dispatch(object(Request)) in Kernel.php line 246
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 52
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Debugbar.php line 49
at Debugbar->handle(object(Request), object(Closure))
at call_user_func_array(array(object(Debugbar), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 44
at CheckForMaintenanceMode->handle(object(Request), object(Closure))
at call_user_func_array(array(object(CheckForMaintenanceMode), 'handle'), array(object(Request), object(Closure))) in Pipeline.php line 136
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 32
at Pipeline->Illuminate\Routing\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 102
at Pipeline->then(object(Closure)) in Kernel.php line 132
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 99
at Kernel->handle(object(Request)) in index.php line 53

PUT 方法仅在您的表单方法是 POST 并且您添加值为 PUT 的 _method 输入字段时才有效。

<form method="post">
    <input type="hidden" name="_method" value="PUT">
</form>

不允许 PUT 请求,因为您正在使用 Route::post($uri, $callback)

您需要将路由指定为 Route::put($uri, $callback) 或(如果您还需要匹配其他请求):

Route::match(['post', 'put'], '/a', function () {
    // for post & put requests
});

Route::any('/a', function () {
    // for all methods
});

如评论和其他答案中所述,PUT 请求必须是 POST 具有附加参数 _method=PUT.

的请求

请参考:https://laravel.com/docs/5.2/routing#basic-routing

你也可以使用

    {{ method_field('PUT') }}

在您的表单中使用 method = post 。以便 method_field 将其转换为 put

然后在你的 routes.php

     Route::put(.....);

    Route::any(...);