2015-02-19 2 views
1

Как я могу вернуть данные json при исключении laravel catch? Я хотел бы вернуть данные Json, когда данных в базе данных не существует.Как я могу вернуть данные json, когда исключение исключения Laravel 5?

Когда laravel нашел запись из базы данных, он вернет правильные данные json.Yeah! Если 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); 

      } 
    } 
+0

Попытка поймать исключение, как это: 'улов (Осветите \ Database \ Eloquent \ ModelNotFoundException $ е)' – user3714582

+0

Я пытался, но ничего не поймать. Поэтому я изменил его на условие. Я знаю, что это не идеально, но, по крайней мере, он возвращает json ... Я попробую вашу идею. Может быть какой-то класс исключения ... Я думаю .... – idpokute

ответ

1

Я решаю проблему. Во-первых, я изменил метод findOrFail для поиска метода. Во-вторых, я понял, что Exception и Illuminate \ Database \ Eloquent \ ModelNotFoundException $ e ничего не могли поймать. Поэтому я изменился на условие. Тогда это работает.

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); 
    } 
+0

"if (is_null ($ todo)) {" Я бы написал его как "if (! $ Todo instanceOf Todo) {" для большей точности :) – astroanu

Смежные вопросы