Laravel:如何防止在RouteCollection.php中出现MethodNotAllowedHttpException异常,当有人访问一个post-route而没有给出post参数时?当我定义了一个发布路由,它只能被一个发布请求访问。如果我在浏览器中正常调用url,它会抛出一个异常。如何防止这个?
dojqjjoe1#
任何人都可以使用不允许的方法请求您的任何路由。您可以在resources/views/errors文件夹中查看异常。默认情况下,Laravel附带一个HTTP状态代码503(服务不可用错误)的错误页面。MethodNotAllowedHttpException的HTTP状态代码是405,因此创建一个名为405.blade.php的视图将导致Laravel显示该视图,而不是MethodNotAllowedHttpException消息。
resources/views/errors
503
405
405.blade.php
ovfsdjhp2#
这应该做的工作,这将捕捉所有的错误,如,方法不允许或404(页面未找到)或模型未找到或令牌错过匹配,并重定向到任何路由,你想要与适当的错误!
Handler.php public function render($request, Exception $e){ if ($e instanceof ForbiddenException) { return redirect()->route('name')->withErrors(['error' => $e->getMessage()]); } return parent::render($request, $e); }
或仅用于不允许的方法
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException; if ($e instanceof MethodNotAllowedHttpException) { return redirect()->route('name')->withErrors(['error' => $e->getMessage()]); }
wtzytmuj3#
使用Route::any()或Route::match()示例:
Route::any()
Route::match()
Route::match(['get', 'post'], '/', function () { // }); Route::any('foo', function () { // });
dgsult0t4#
我尝试了比赛和任何方法,但它们都不是我所需要的。我是这么做的:1-在Base控制器中添加默认的错误处理程序。2-手动调用每个禁止的HTTP方法的错误。
然后,在BaseController上:
py49o6xq5#
添加一个文件“405.blade.php”到你的“资源/视图/错误”中会阻止MethodNotAllowedHttpException页面再次出现。
rm5edbpk6#
对于laravel 9,我是这样解决的,你可以改变要捕捉的异常,一定要把它包含在顶部:
use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
以及:
Handler.php /** * Register the exception handling callbacks for the application. * * @return void */ public function register() { $this->reportable(function (Throwable $e) { // }); $this->renderable(function (MethodNotAllowedHttpException $e, $request) { return abort(404, "page not found"); }); }
6条答案
按热度按时间dojqjjoe1#
任何人都可以使用不允许的方法请求您的任何路由。您可以在
resources/views/errors
文件夹中查看异常。默认情况下,Laravel附带一个HTTP状态代码503
(服务不可用错误)的错误页面。MethodNotAllowedHttpException的HTTP状态代码是
405
,因此创建一个名为405.blade.php
的视图将导致Laravel显示该视图,而不是MethodNotAllowedHttpException消息。ovfsdjhp2#
这应该做的工作,这将捕捉所有的错误,如,方法不允许或404(页面未找到)或模型未找到或令牌错过匹配,并重定向到任何路由,你想要与适当的错误!
或仅用于不允许的方法
wtzytmuj3#
使用
Route::any()
或Route::match()
示例:
dgsult0t4#
我尝试了比赛和任何方法,但它们都不是我所需要的。
我是这么做的:
1-在Base控制器中添加默认的错误处理程序。2-手动调用每个禁止的HTTP方法的错误。
然后,在BaseController上:
py49o6xq5#
添加一个文件“405.blade.php”到你的“资源/视图/错误”中会阻止MethodNotAllowedHttpException页面再次出现。
rm5edbpk6#
对于laravel 9,我是这样解决的,你可以改变要捕捉的异常,一定要把它包含在顶部:
以及: