【问题标题】:How can I return json data when Laravel 5 catch exception?Laravel 5捕获异常时如何返回json数据?
【发布时间】:2015-04-21 13:26:12
【问题描述】:

laravel 捕获异常时如何返回 json 数据? 当数据库中不存在数据时,我想返回 Json 数据。

当 laravel 从数据库中找到记录时,它会返回正确的 json 数据。是的! 如果 laravel 没有搜索到任何记录,它不会给出 json 数据! laravel 刚刚重定向了显示“哎呀,看起来出了点问题”的页面。并提供一些额外的信息,“ModelNotFoundException”。

以下代码是我尝试过的。

    public function show($id)
    {
            try {
                    $statusCode = 200;
                    $response = [
                            'todo' => []
                    ];

                    $todo = Todo::findOrFail($id);

                    $response['todo']= [
                            'id'       =>       $todo->id,
                            'title'    =>       $todo->title,
                            'body'     =>       $todo->body,
                    ]; 

            } catch(Exception $e) {
                    // I think laravel doesn't go through following exception
                    $statusCode = 404;   
                    $response = [
                            "error" => "You do not have that record"
                    ];

            } finally {
                    return response($response, $statusCode);

            }
   }

【问题讨论】:

  • 尝试像这样捕获异常:catch(Illuminate\Database\Eloquent\ModelNotFoundException $e)
  • 我试过了,但它没有捕捉到任何东西。所以我把它改成了if条件。我知道它并不完美,但至少它返回 json ......我会尝试你给出的想法。可能有一些异常类......我猜......

标签: json laravel laravel-5


【解决方案1】:

我解决了问题。首先,我将 findOrFail 方法更改为 find 方法。其次,我意识到 Exception 和 Illuminate\Database\Eloquent\ModelNotFoundException $e 无法捕获任何东西。所以我改为if条件。然后就可以了。

    public function show($id)
    {        
            $statusCode = 200;
            $response = [
                    'todo' => []
            ];

            $todo = Todo::find($id);

            if ( is_null($todo) ) {
                    $statusCode = 404;
                    $response = [
                            "error" => "The record doesn't exist"
                    ];

            } else {
                    $response['todo']= [
                            'id'       =>       $todo->id,
                            'title'    =>       $todo->title,
                            'body'     =>       $todo->body,
                    ]; 

            }

            return response($response, $statusCode);
    }

【讨论】:

  • "if ( is_null($todo) ) {" 我会把它写成 "if (!$todo instanceOf Todo ) {" 为了更准确:)
猜你喜欢
  • 2012-06-23
  • 2017-02-23
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多