如何处理 laravel 中未定义的 POST 路由?

需求场景:

我的项目是一个纯接口项目(所有接口都是 POST 方式),希望在用户访问不存在的路由时,以友好的 json 格式返回错误信息,告知路由不存在。

我的做法:

在路由文件最后一行添加:

Route::fallback('ErrorController@notFound');

预期结果:

当使用 GET 方式请求不存在的路由时,正确返回了错误信息。但当使用 POST 方式请求不存在的路由时,是一个包含错误信息的页面(不是正确的接口返回格式),形如:

如何处理 laravel 中未定义的 POST 路由?

我的问题:

如何处理不存在的 POST 路由,才能使得返回的数据是接口形式,而不是一个错误页面?

代码是写给人看的,顺便给机器运行一下。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 24
chowjiawei

fallback好像只能针对于get 其他的是 框架自带的 提示你这个路由只能有post还是put

3年前 评论
chowjiawei

你可以在异常文件里面 重写这个异常

3年前 评论
luci (楼主) 3年前

app\Exceptions Handler里面捕获 MethodNotAllowedHttpException 异常

3年前 评论
luci (楼主) 3年前
琴玖-klein (作者) 3年前

可以在 app\Exceptions 目录下 Handlerrender 方法捕获异常,类似这样:

if ($exception instanceof MethodNotAllowedHttpException) {   
     // 自定义返回 
 }
3年前 评论
luci (楼主) 3年前
Su 3年前
leo

Route::fallback 本质上是一个语法糖,追一下源码就知道怎么解决了

3年前 评论
    public function render($request, Throwable $e)
    {
        if ($e instanceof NotFoundHttpException){
            return response()->json([
                'message' => '访问的 url 不存在'
            ]);
        }
        return parent::render($request, $e); // TODO: Change the autogenerated stub
    }
3年前 评论
hefengbao (作者) 3年前
luci (楼主) 3年前
hefengbao (作者) 3年前
luci (楼主) 3年前
Su 3年前

file

file

不知道你是怎么用的, 我试过没问题的。

测试的时候, 在 Headers 里要添加 Accept : application/json

3年前 评论
hefengbao (作者) 3年前
luci (楼主) 3年前

把路由文件里的 fallback 去掉,然后自己在 render 捕获异常抛出

3年前 评论
luci (楼主) 3年前

6 楼是正解,楼主你换下对象类型应该就可以了

3年前 评论

全局错误处理

3年前 评论

异常处理哪里做下异常处理就好了

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!