如何为 QueryException 创建错误页面?

How to create an error page to a QueryException?

我正在开发一个商业应用程序,我已经为多种 HTTP 错误创建了 Blade 文件。它们位于 /resources/views/errors 中,并且在授权 (503.blade.php)、未找到页面 (404.blade.php) 等方面工作正常。

到目前为止,我已经为 400、403、404、500 和 503 创建了文件。 问题是抛出 QueryException 时。在这种情况下,出现"Whoops, looks like something went wrong."

例如,考虑到 name 不能为 null,当我这样做时,Laravel 抛出一个 QueryException:

User::create([
          'name' => null,
          'email' => 'some@email.com'
]);

例外情况是:

QueryException in Connection.php line 651: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be null (SQL: insert into users (nome, email, updated_at, created_at) values (, some@email.com, 2018-02-09 12:10:50, 2018-02-09 12:10:50))

我不想 "Whoops, looks like something went wrong." 显示给最终用户,我想显示一个自定义页面。我需要创建什么样的错误文件才能实现此行为?

在你的控制器中试试这个:

try {
    User::create([
          'name' => null,
          'email' => 'some@email.com'
    ]);
} catch ( \Illuminate\Database\QueryException $e) {
    // show custom view
    //Or
    dump($e->errorInfo);
}

捕获所有查询异常:

您需要自定义 App\Exceptions\Handlerrender() 方法,如 Docs 中所述。

public function render($request, Exception $e)
{
    if ( $e instanceof \Illuminate\Database\QueryException ) {
        // show custom view
        //Or
        dump($e->errorInfo);
    } 
   return parent::render($request, $exception);
}