重写laravel 异常抛出处理

所有异常错误都由类App\Exceptions\Handler处理,该类包含两个方法:report和render。 
这里我们只看render方法,该方法会将异常渲染到HTTP响应中,就是说上面的错误信息就是通过这个方法展示的。

public function render($request, Exception $e)
{

    /* 错误页面 */
    if ($e instanceof HttpException) {
            $code = $e->getStatusCode();

            if (view()->exists('errors.' . $code)) {
                $message  = $e->getMessage();
                return response()->view('errors.' . $e->getStatusCode(), ['message'=>$message], $e->getStatusCode());
            }
     }
     return parent::render($request, $e);
   }

  或者如下处理

protected $dontReport = [
    //     AuthorizationException::class,
    //     HttpException::class,
    //     ModelNotFoundException::class,
    //     ValidationException::class,
    ];
public function render($request, Exception $e)
    {
        if (getenv('APP_DEBUG')) {
            return parent::render($request, $e);
        }else{
            switch ($e){
               case ($e instanceof HttpException):

                   
                   //自定义处理异常,此处我们返回一个404页面
                   return view('errors.404');
                   break;

               default:
               
                   //返回laravel默认的错误页面
                   return parent::render($request, $e);

           }
        }
    }

 

posted @ 2017-03-23 16:28  佚小名  阅读(4744)  评论(0编辑  收藏  举报