Когда я получу эту ошибку:
QueryException в строке 620 Connection.php: SQLSTATE [23000]: нарушение ограничения целостности: 1062 Дубликат записи
могу ли я обработать его со своим собственным сообщением об ошибке, а не:
Упс, похоже, что-то пошло не так
У вас есть два способа обработки исключений и отображение пользовательского ответа:
1) Пусть структура обрабатывает их для вас:
Если вы не будете обрабатывать исключения самостоятельно, Laravel будет обрабатывать их в классе:
App\Exceptions\Handler
В методе render
вы можете перехватить визуализацию всех исключений, которые создает рамка. Итак, если вы хотите что-то делать, особенно когда возникает конкретное исключение, вы можете изменить этот метод следующим образом:
public function render($request, Exception $e) { //check the type of the exception you are interested at if ($e instanceof QueryException) { //do wathever you want, for example returining a specific view return response()->view('my.error.view', [], 500); } return parent::render($request, $e); }
2) Обращайтесь с исключениями самостоятельно:
Вы можете обрабатывать исключения самостоятельно, используя блоки try-catch
. Например, в методе контроллера:
try { //code that will raise exceptions } //catch specific exception.... catch(QueryException $e) { //...and do whatever you want return response()->view('my.error.view', [], 500); }
Основное различие между этими двумя случаями состоит в том, что в случае 1 вы определяете общий подход на уровне приложения для обработки конкретных исключений.
С другой стороны, в случае 2 вы можете определить исключение в определенных точках вашего приложения
это работа со мной отлично
if ($ e instanceof \ PDOException) {
$dbCode = trim($e->getCode()); //Codes specific to mysql errors switch ($dbCode) { case 23000: $errorMessage = 'my 2300 error message '; break; default: $errorMessage = 'database invalid'; } return redirect()->back()->with('message',"$errorMessage"); }