Laravel 5.5 - 使用POST方法时的MethodNotAllowedHttpException

Laravel 5.5 - 使用POST方法时的MethodNotAllowedHttpException

问题描述:

我创建了用于从数据库中获取数据的过滤器。当我使用GET方法,它的工作原理但POST方法,我得到错误:Laravel 5.5 - 使用POST方法时的MethodNotAllowedHttpException

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

我花了几个小时寻找解决办法,但好像我在这里失去了一些东西。

对于测试,我试图直接在路线中得到结果,但它仍然是同样的问题。

This Works。

<?php 
use App\test; 
Route::get('/', function() { 
    $test = test::all(); 
return $test; 
}); 

这不起作用。

<?php 
use App\test; 
Route::post('/', function() { 
    $test = test::all(); 
return $test; 
}); 
+1

尝试清除缓存'php artisan route:clear' – FuzzyTree

+0

@FuzzyTree它没有帮助。 – User3100

+0

你如何测试帖子?你实际上是在创建一个发布请求吗?还是以与获取相同的方式进行测试? – FuzzyTree

use App\test; 
Route::post('/', function() { 
    $test = test::all(); 
return $test; 
}); 

一律为Request一个实例,所以你不能直接访问它的浏览器,如GET你有某种形式的数据发布到它。因此,最好将它重命名为,也许像:

use App\test; 

Route::post('/test', function (Request $request) { 
    $test = test::all(); 
return $test; 
}); 

$request握住你的表单数据

Route::get()Route::post()被定义为指定的HTTP方法途径处理。

如果只定义了这条路线:

Route::post('/', function() { 
    $test = test::all(); 
    return $test; 
}); 

然后,你必须确保该URL的所有调用使用POST方法。如果您使用GET方法向该网址发送请求,则会得到MethodNotAllowedHttpException异常,因为您只定义了POST方法处理程序。

看起来您可能会忘记{{csrf_field()}}。将此添加到您的表单中。

如果你发布的数据没有csrf,在laravel 5.5中你会看到这个错误。

请注意,如果您正在撰写发布路线,在测试时请确保您将数据发布到网页,否则会发生错误。

帖子路由不能简单地通过调用url来测试,方法应该是post。如果你使用邮递员检查路由URI,它将起作用。