0

Например, я использую:Как обрабатывать собственное исключение в Laravel?

return User::findOrFail($id); 

Если строка не существует с $id я получаю исключение.

Как я могу вернуть это исключение в ответ Json? Теперь он возвращает страницу HTML Laravel.

мне нужно что-то вроде как:

{"error", "No query results for model"} 

ответ

1

Из их документации:

Иногда вы можете бросить исключение, если модель не найдена. Это особенно полезно в маршрутах или контроллерах. Методы findOrFail и firstOrFail будут извлекать первый результат запроса. Однако, если результат не найден, будет выбрано Illuminate \ Database \ Eloquent \ ModelNotFoundException.

Итак, вы можете либо поймать это исключение, либо пойти простым методом Find. Он вернет false, если не найден, поэтому вы можете обработать его соответствующим образом.

return User::find($id); 

UPDATE:

Вариант 1:

try { 
    return User::findOrFail($id); 
} catch (\Illuminate\Database\Eloquent\ModelNotFoundException $e) { 
    return json_encode(['error' => 'No query results for model']); 
} 

Вариант 2:

$user = User::find($id); 
if($user) { 
    return $user; 
} 
return json_encode(['error' => 'No query results for model']); 
+0

Я знаю об этом, но вернуть мне не ясно, ошибка, завернутые в HTML код – Dev

+0

Что вы имеете в виду? Он выдает исключение, и если он не пойман правильно, вам будет показана страница HTML, в которой говорится, что было выбрано исключение. Вот как работают исключения. Чтобы поймать его, вам нужно обернуть свой код в блок try/catch. Другим подходом было бы просто пойти с методом поиска. – trajchevska

+0

Я имею в виду, что мне нужно вернуть сообщение без HTML-кода для API mobile – Dev

0

Вы должны смотреть в render метод Handler file. Вы можете проверить класс исключений здесь и в зависимости от него вернуть различный отклик в формате Json

1

Вы можете обрабатывать различные типы исключений, что исключение может быть справиться с ModelNotFoundException в этом случае

try{ 
    $user = User::findOrFail($id); 
}catch(ModelNotFoundException $e){ 
    return response()->json(['error' => 'User not found'], 400); 
} 

И есть еще один способ чтобы поймать различные типы исключений в Handler.php, находящиеся на app/Exceptions/Handler.php, вы можете поймать исключения и вернуть все, что хотите, внутри функции render.

Например insede, что функция, которую вы можете добавить это перед return parent::render($request, $e):

if($e instanceof ModelNotFoundException) 
{ 
    return new Response(['message' => 'We haven\'t find any data'], 204); 
}