【问题标题】:how do I create custom error page in laravel 5如何在 laravel 5 中创建自定义错误页面
【发布时间】:2015-02-24 06:40:33
【问题描述】:

我想在我的 Laravel 5 应用中显示自定义错误页面;例如任何用户类型的 URL,如 http://www.example.com/url123(错误)但 http://www.example.com/url(正确)。

默认错误显示为:

呃-哦,出了点问题!错误代码:500

但我想显示我的自定义视图

我如何实现这一点,如下面引用的页面所示:

https://mattstauffer.co/blog/laravel-5.0-custom-error-pages#how-to

https://laracasts.com/discuss/channels/general-discussion/how-do-i-create-a-custom-404-error-page

我现在的app/Exceptions/Handler.php

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
use symfony\http-kernel\Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

class Handler extends ExceptionHandler {

    protected $dontReport = [
        'Symfony\Component\HttpKernel\Exception\HttpException'
    ];

    public function report(Exception $e)
    {
        return parent::report($e);
    }
    public function render($request, Exception $e)
    {
        if ($this->isHttpException($e))
        {
            return $this->renderHttpException($e);
        }
        else if($e instanceof NotFoundHttpException)
        {
            return response()->view('missing', [], 404);
        }
        else
        {
            return parent::render($request, $e);
        }
    }

}

我在\resources\views\errors\404.blade.php 创建了一个错误视图,但404.blade.php 仍然没有加载。

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    我正在使用 Laravel 6.4,为此,您可以创建自定义错误页面刀片文件,Laravel 将为您完成剩下的工作。在你的项目目录中运行以下命令

    php artisan vendor:publish --tag=laravel-errors
    

    这将在resources/views/errors/. 中创建刀片文件,例如对于404 错误,您将在resources/views/errors/404.blade.php. 中拥有它。 现在假设您希望在示例代码中传递 Not Found Error 让我们说一个返回帖子类别的函数

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $count = Post::find($id)->count();
    
        if ($count < 1)  return abort('404', 'The post you are looking for was not found');
    }
    

    abort() 方法将触发未找到异常,加载刀片文件resources/views/errors/404.blade.php 并作为消息传入第二个参数。您可以在刀片文件中以

    的身份访问此消息
    <h2>{{ $exception->getMessage() }}</h2>
    

    详情请访问此链接(官方文档)https://laravel.com/docs/6.x/errors#custom-http-error-pages

    【讨论】:

      【解决方案2】:

      谢谢各位, 现在它正在成功运行,

      我只是更改了我的 app/Exceptions/Handler.php :

      <?php
      
      namespace App\Exceptions;
      
      use Exception;
      use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
      
      class Handler extends ExceptionHandler {
      
          protected $dontReport = [
              'Symfony\Component\HttpKernel\Exception\HttpException'
          ];
      
          public function report(Exception $e)
          {
              return parent::report($e);
          }
      
          public function render($request, Exception $e)
          {
              if ($this->isHttpException($e)) {
                  return $this->renderHttpException($e);
              } else {
                  return parent::render($request, $e);
              }
          }
      
      }
      

      并在以下位置创建错误视图:\resources\views\errors\404.blade.php

      【讨论】:

      • 为了完成你的回答,如果你不想要默认错误页面(哎呀......)而不是返回parent::render,你可以返回一个响应对象response()-&gt;view('my.custom.view', [], 500);
      • 如何获得类似页面过期为 419 的消息(不是特定错误)??。 $exception->getMessage() 给出具体错误
      【解决方案3】:

      首先你需要输入命令 php artisan vendor:publish --tag=laravel-errors

      它会在资源/视图/错误中创建一些错误刀片文件,例如 404,500,403,401,419,429,503。您可以根据您的设计要求自定义这些页面。

      app/Exceptions/Handler.php

      public function render($request, Throwable $exception)
      {
          $response = parent::render($request, $exception);
          if ($response->status() === 500) {
              return response(view('errors.500'), 500);
          }
          return $response; 
      }
      

      app/config/app.php

      'debug' => (bool) env('APP_DEBUG', false)

      注意:不要在视图文件夹中手动创建错误文件夹,因为某些库文件未在供应商文件夹中创建。这是引发错误的原因。请只使用 laravel 命令。

      【讨论】:

        【解决方案4】:

        这在 Laravel 5.5 中对我有用:-

        /config/constants.php

        define('ERROR_MSG_403', "You are not authorized to view that page!");
        define('ERROR_MSG_404', "Page not found!");
        define('ERROR_MSG_UNKNOWN', "Something went wrong!");
        

        /app/Exceptions/Handler.php

        public function render($request, Exception $e)
            {
                $response = [];
        
                $response['exception'] = get_class($e);
                $response['status_code'] = $e->getStatusCode();
        
                switch($response['status_code'])
                {
                    case 403:
                        $response['message'] = ERROR_MSG_403;
                        break;
                    case 404:
                        $response['message'] = ERROR_MSG_404;
                        break;
                    default:
                        $response['message'] = ERROR_MSG_UNKNOWN;
                        break;
                }
        
                return response()->view('Error.error', compact('response'));
                // return parent::render($request, $exception);
            }
        

        /resources/views/Error/error.blade.php

        <?=dd($response); //Implement your view layout here?>
        

        【讨论】:

          【解决方案5】:

          如果您想我如何​​在您的 php laravel 应用程序上制作自定义错误页面,例如 403、500、502、504、404、405、408,那么您可以有效地制作并执行它而不会出现任何问题。您可以在 laravel Venture 中通用设置自定义错误页面。如果您需要将 404 页面设置为自定义错误页面,那么您可以毫无问题地做到这一点。

          app/Exceptions/Handler.php

          namespace App\Exceptions;
          
           
          
          use Exception;
          
          use Illuminate\Validation\ValidationException;
          
          use Illuminate\Auth\Access\AuthorizationException;
          
          use Illuminate\Database\Eloquent\ModelNotFoundException;
          
          use Symfony\Component\HttpKernel\Exception\HttpException;
          
          use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
          
           
          
          class Handler extends ExceptionHandler
          
          {
          
           
          
          /**
          
          * A list of the exception types that should not be reported.
          
          *
          
          * @var array
          
          */
          
          protected $dontReport = [
          
          AuthorizationException::class,
          
          HttpException::class,
          
          ModelNotFoundException::class,
          
          ValidationException::class,
          
          ];
          
           
          
          /**
          
          * Report or log an exception.
          
          *
          
          * This is a great spot to send exceptions to Sentry, Bugsnag, etc.
          
          *
          
          * @param \Exception $e
          
          * @return void
          
          */
          
          public function report(Exception $e)
          
          {
          
          parent::report($e);
          
          }
          
           
          
          /**
          
          * Render an exception into an HTTP response.
          
          *
          
          * @param \Illuminate\Http\Request $request
          
          * @param \Exception $e
          
          * @return \Illuminate\Http\Response
          
          */
          
          public function render($request, Exception $e)
          
          {
          
          if($this->isHttpException($e)){
          
          if (view()->exists('errors.'.$e->getStatusCode()))
          
          {
          
          return response()->view('errors.'.$e->getStatusCode(), [], $e->getStatusCode());
          
          }
          
          }
          
          return parent::render($request, $e);
          
          }
          
          }
          

          你可以通过here查看这个

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-10-03
            • 1970-01-01
            • 1970-01-01
            • 2015-07-25
            • 2014-02-22
            • 1970-01-01
            • 2013-02-13
            相关资源
            最近更新 更多