【问题标题】:Laravel 5.3 how to redirect to default error pageLaravel 5.3 如何重定向到默认错误页面
【发布时间】:2019-02-14 10:53:33
【问题描述】:

我为 Laravel 安装创建了一个默认错误页面,该页面位于文件夹 views/errors

在同一个文件夹中,我还有其他错误页面,例如 404.blade.php503.blade.php

对于已经存在的pages/errors,重定向处理没有问题,例如404 未找到错误。

我希望所有其他错误将用户重定向到位于同一文件夹 view/errors/general.blade.php 中的默认错误页面

我已经在 app/Exceptions/Handler.php 上覆盖了函数 renderHttpException

protected function renderHttpException(HttpException $e)
{
   if (! view()->exists("errors.{$e->getStatusCode()}")) {
      return response()->view('errors.general', ['exception' => $e], 500,    
      $e->getHeaders());
   }
    return parent::renderHttpException($e);
 }

当发生错误并且错误页面不存在时,我会将用户重定向到一般错误页面。

问题是它不起作用。所有其他错误页面都可以正常工作。当发生另一个错误时,我得到了

“哎呀,好像出了点问题”。

【问题讨论】:

  • 我想用我自己的页面替换“Whooops”页面。我想使用 404 错误页面,但对于所有其他错误,我想显示一般错误页面。

标签: php laravel error-handling


【解决方案1】:

在您的处理程序上 (app/Exceptions/Handler.php) 您可以重定向到默认视图:

public function render($request, Exception $exception){
    if ($exception) {
            return response()->view('errors.custom',);
        }
}

您还需要在此处处理您的 HTTP 错误,因此将重定向到另一个页面,但将其他错误重定向到自定义页面。

【讨论】:

    【解决方案2】:

    至少对我来说,这个解决方案是有效的。 在 app/Exceptions/Handler.php 中编辑函数渲染

    并添加以下代码:

            if ($exception instanceof \ErrorException) {
                 return response()->view("errors.general");
            }
    

    现在所有自定义错误都可以正常工作,例如 404 以及我没有自定义错误页面重定向到常规页面的所有其他错误

    【讨论】:

      【解决方案3】:

      编辑:

      在 laravel 中,您可以转到 App/Exceptions/Handler.php 并在底部编辑渲染函数以使用自定义视图。

      public function render($request, Exception $e)
      {
          return view('somview');
      }
      

      【讨论】:

      • 我想用我自己的页面替换“Whooops”页面。我想使用 404 错误页面,但对于所有其他错误,我想显示一般错误页面。我知道错误页面是如何创建的
      【解决方案4】:

      在 laravel 中使用 abort 函数,如下所示并传递您的 HTTP 异常代码:

      abort(404,'Page not found.');
      

      它将重定向到您在以下位置的文件:

      resources/views/errors/404.blade.php
      

      【讨论】:

      • Laravel 有自己的错误处理。而不是显示默认的“哎呀”页面我想显示我的
      • 尝试在文件顶部使用Symfony\Component\HttpKernel\Exception\HttpException 导入HttpException 类。
      • 这是最好的答案!在 Laravel 中,如果您想显示自己的错误页面,您只需在 resources/views/errors/<error_code>.blade.php 中创建该页面,然后使用 abort(<error_code>); 调用它
      • 那么解决方案是创建 200 个视图?
      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 2012-01-03
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多