【问题标题】:How to handle 404 as json response if route not found?如果找不到路由,如何将 404 处理为 json 响应?
【发布时间】:2019-01-12 02:56:14
【问题描述】:

使用 Laravel 5.4,我想发送 json 响应,虽然在 api.php 中没有找到路由,但我如何在 api.php 中存档并且没有 Controller 和 Model 类。

short:路由名称错误如何处理?

fallback 试过:

Route::fallback(function(){
    return response()->json(['message' => 'Not Found!'], 404);
});

以上错误:

Attribute [fallback] does not exist.

请帮帮我,当路由名称请求错误时如何处理 Route not found 异常。

【问题讨论】:

标签: php laravel-5 laravel-5.4 laravel-routing laravel-response


【解决方案1】:

从 5.6 版开始提供回退。试试 Route::any()


@NobbyNobbs - trim() 期望参数 1 是字符串,给定对象

在您的 api.php 末尾(在所有其他路由下方)添加类似

Route::any('{path}', function() {
    return response()->json([
        'message' => 'Route not found'
    ], 404);
})->where('path', '.*');

如何在没有控制器和模型类的情况下使用 api.php 进行归档

在我看来,使用匿名函数作为路由处理程序并不是一个好主意,因为如果你使用闭包,你就不能缓存你的路由,这会导致一些开销。

【讨论】:

    【解决方案2】:

    您可以通过在您的 app/Exceptions/Handler.php 文件中处理它来使其全局化。

    Laravel v7

    您可以在下面添加此代码:

    public function render($request, Throwable $exception)
        {
            if ($request->expectsJson()){
    
                if ($exception instanceof ModelNotFoundException){
                    return response([
                        'errors'=> 'Object Not Found'
                    ], 404);
                }
    
                if ($exception instanceof NotFoundHttpException){
                    return response([
                        'errors'=> 'Route Not Found'
                    ], 404);
                }
              
            }
    
            return parent::render($request, $exception);
            
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 2015-11-17
      • 2010-09-23
      • 2013-03-12
      • 1970-01-01
      • 2020-03-26
      相关资源
      最近更新 更多