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

需求场景:

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

我的做法:

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

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

预期结果:

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

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

我的问题:

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

代码是写给人看的,顺便给机器运行一下。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 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年前 评论

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