Обработка ошибки, генерируемой методом контроллера ресурса - PullRequest
0 голосов
/ 30 августа 2018

Я работаю с Laravel 5.6 и решил создать контроллер ресурсов для одной из моих моделей. Хорошо, я пытаюсь уничтожить запись из базы данных следующим образом:

public function destroy(Role $role)
  {
      $role->delete();

      return response([
          'alert' => [
              'type' => 'success',
              'title' => 'Role destroyed!'
          ]
      ], 200);
  }

Он работает просто отлично, пока существует $role. Моя проблема в том, что я хочу обработать ответ сам в случае, если $role не существует, чтобы сделать что-то вроде этого:

return response([
     'alert' => [
         'type' => 'ups!',
         'title' => 'There is no role with the provided id!'
     ]
], 400);

Но вместо этого я получаю сообщение об ошибке:

"No query results for model [App\\Models\\Role]."

А это то, чего я не хочу.

Заранее спасибо!

1 Ответ

0 голосов
/ 30 августа 2018

"No query results for model [App\\Models\\Role]." - стандартное ответное сообщение для исключения ModelNotFound в Laravel.

Лучший способ изменить ответ для исключения, подобного этому, - использовать функцию рендеринга обработчика исключений, чтобы ответить тем сообщением, которое вы хотите.

Например, вы могли бы сделать

if ($e instanceof ModelNotFoundException) {
        $response['type'] = "ups!;
        $response['message'] = "Could not find what you're looking for";
        $response['status'] = Response::HTTP_NOT_FOUND
    }


    return response()->json(['alert' => $response], $response['status']);

Альтернатива заключается в том, чтобы исключение ModelNotFound не генерировалось (поэтому при запросе модели используйте ->find() вместо ->findOrFail()) а затем с помощью помощника по прерыванию, например, если результаты не возвращаются:

abort(400, 'Role not found');

или

return response(['alert' => [
    'type' => 'ups!', 
    'title' => 'There is no role with the provided id!']
],400);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...