【问题标题】:How to create an error page to a QueryException?如何为 QueryException 创建错误页面?
【发布时间】:2018-02-09 12:22:53
【问题描述】:

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

到目前为止,我已经为 400、403、404、500 和 503 创建了文件。 问题是何时抛出 QueryException。在这种情况下,“哎呀,好像出了点问题。” 出现。

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

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

例外情况是:

Connection.php 第 651 行中的 QueryException:SQLSTATE[23000]:完整性 违反约束:1048 列“名称”不能为空(SQL:插入 进入users (nome, email, updated_at, created_at) 值 (, some@email.com, 2018-02-09 12:10:50, 2018-02-09 12:10:50))

我不希望 “哎呀,好像出了点问题。” 出现在最终用户面前,我想显示一个自定义页面。我需要创建什么样的错误文件来实现这种行为?

【问题讨论】:

  • 只需在 env 中将调试模式设置为 false 用于生产,这样用户就不会看到这个。
  • 致@TheAlpha,我已经这样做了。我不想显示“哎呀,好像出了点问题。”,我想显示一个自定义页面。我已经编辑了问题以更好地解释这一点。
  • 然后删除哎呀

标签: php laravel laravel-5.1


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答!这是一个很好的方法,但是有没有通用的方法来实现这一点?假设我不知道它会发生在哪里。
  • 这很好用!我唯一需要改变的是我需要返回父方法而不是再次抛出异常。
  • @ElMynx 太棒了!如果对你有帮助,请采纳答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
相关资源
最近更新 更多