2016-08-19 195 views
0

我必须通过浏览器访问PUT路由并获取json对象,但是L5.2会显示一个MethodNotAllowedHttpException错误,我该如何解决这个问题?RouteCollection.php中的MethodNotAllowedHttpException行218 Laravel 5.2

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

我的路线:列表

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 
+2

您的路线有一个'PSOT'声明。你说你正在使用'PUT',这足以理解“不允许的方法”。但是,当你说'通过浏览器访问',你是什么意思?通过浏览器直接访问URL只能创建一个'GET'。 –

+0

等待....你想'PUT',你在代码中定义'POST',并期望它能够处理'PUT'?我不明白。 –

+0

@PeteHouston对不起,我的错误,我定义路线::放不是路线::后 –

回答

1

PUT方法只有当你的形式方法是POST,然后你添加值为PUT的_method输入字段。

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

如果表单方法PUT,以支持它的浏览器也适用。 – ceejayoz

+0

@ceejayoz是的..但它仅在Mozilla Firefox浏览器的支持。而在http://stackoverflow.com/questions/8054165/using-put-method-in-html-form给“XHTML 1.x的形式仅支持GET和POST。GET和POST是唯一允许值”方法“属性”。 – jaysingkar

+0

@jaysingkar是否有任何配方可以使用Form Method GET做同样的事情? –

1

由于您使用的是Route::post($uri, $callback),因此不允许PUT请求。

您需要指定您的路线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

+0

好吧,我明白了,我很抱歉。在我的任务中,我必须能够通过浏览器访问PUT路由我必须做什么? –

0

你也可以使用

{{ method_field('PUT') }} 

与method = post的表单中。让method_field其转换为把

然后在你的routes.php文件

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

Route::any(...); 
相关问题