一般在web开发中,我们很少会接触到除了404页面其它的http通信错误页面,即使是做404页面,我们也只是单纯的修改框架自带了404模板,很少能够做到完全的控制。但Laravel5改变了这种现状,那么,我们去看看如何使用Laravel5自定义错误页面的。

Laravel5是如何处理异常的

Laravel5将所有的自定义错误和异常处理都移到了App/Exceptions/Hander.php。早期Laravel的报错页面会显示'Whoops...',然后显示出错误信息,laravel后期还专门弄了个花哨的错误异常页面,可能是觉得异常页面多数在项目上线之后会被关闭或者自定义错误页面,所以就回到了最初的美好---'Whoops...'.

在hander里面调用的方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* 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))
{
return $this->renderHttpException($e);
}
else
{
return (new SymfonyDisplayer(config('app.debug')))->createResponse($e);
}
}

  

所有的HTTP异常(如404和503),它们都是使用renderHttpException方法,它在\Illuminate\Foundation\Exceptions\Handler下可以找见。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* Render the given HttpException.
*
* @param \Symfony\Component\HttpKernel\Exception\HttpException $e
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected function renderHttpException(HttpException $e)
{
if (view()->exists('errors.'.$e->getStatusCode()))
        {
            return response()->view('errors.'.$e->getStatusCode(), [], $e->getStatusCode());
        }
        else
        {
            return (new SymfonyDisplayer(config('app.debug')))->createResponse($e);
}
}

  

我们看到view方法下定义了视图存在的位置,{'errors'.$e->getStatusCode()},OK,现在就明白了,Http错误页面就是对应在views/errors/[code].blade.php文件,比如:404.blade.php,503.blade.php等等。若是对应的code错误页面不存在,会使用默认的Whoop抛出异常。

我在laravel4中是如何处理异常的

异常捕捉是在路由文件中进行的:

1
2
3
4
5
6
7
8
9
10
11
// error
App::error(function (Exception $exception) {
        Log::error($exception);
        $error = $exception->getMessage();
  
if(Request::ajax()){
return Response::json(['status'=>false'error'=>$error]);
}else{
return Redirect::back()->withErrors(compact('error'));
}
});

  

自定义404错误页面也是在理由文件中进行的:

1
2
3
4
// 404 page not found
App::missing(function () {
return Response::view('errors.404', array(), 404);
});

  

相比laravel4,laravel5将http处理独立出来无疑不体现系统架构的合理化。
在之前我们看到Laravel5的异常处理app/exceptions/Hander.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class Handler extends ExceptionHandler {
  
/**
* A list of the exception types that should not be reported.
*
* @var array
*/
protected $dontReport = [
'Symfony\Component\HttpKernel\Exception\HttpException'
];
  
/**
* 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)
{
return 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)
{
return parent::render($request, $e);
}
  
}

  

第一个方法提交日志,你可以把它提交到你们专门的日志服务器,比如我们公司有自己的鹰眼日志系统;第二个方法执行异常,你也可以在这里使用$e->getStatusCode()获取到http错误代码,根据不同的错误代码进行操作,也可以在此自定义错误模板。

其实,如果大家仔细发现。我在laravel4中对异常处理也是三个方面:日志记录、异常代码处理和自定义错误页面。Laravel5将一系列操作独立出来,那么在异常处理这一块肯定是非常好的提升了。

转载于:https://www.cnblogs.com/i6010/articles/8341964.html

Laravel5.5的异常捕获和处理相关推荐

  1. Spring Boot配置全局异常捕获

    1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...

  2. 简单介绍Go语言错误处理异常捕获+异常抛出

    这篇文章主要介绍了Go语言错误处理异常捕获和异常抛出,Go语言的作者认为java等语言的错误处理底层实现较为复杂,就实现了函数可以返回错误类型以及简单的异常捕获,虽然简单但是也非常精妙,大大的提高了运 ...

  3. 用c实现跨平台异常捕获机制

    为什么80%的码农都做不了架构师?>>>    TBOX封装了一套跨平台的异常捕获实现,来模拟windows的seh异常处理功能,而且是线程安全的. 在linux/mac下的实现 使 ...

  4. python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03

    python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03 参考文章: (1)python网络编程-异常处理-异常捕获-抛出异常-断言-自 ...

  5. Java多层的异常捕获

    Java多层的异常捕获 参考文章: (1)Java多层的异常捕获 (2)https://www.cnblogs.com/somedayLi/p/7847136.html 备忘一下.

  6. ORACLE 存储过程异常捕获并抛出

    ORACLE 存储过程异常捕获并抛出 参考文章: (1)ORACLE 存储过程异常捕获并抛出 (2)https://www.cnblogs.com/wdw31210/p/7009731.html 备忘 ...

  7. SQLServer异常捕获

    SQLServer异常捕获 参考文章: (1)SQLServer异常捕获 (2)https://www.cnblogs.com/OliverQin/p/4994717.html 备忘一下.

  8. Spring boot异常统一处理方法:@ControllerAdvice注解的使用、全局异常捕获、自定义异常捕获

    Spring boot异常统一处理方法:@ControllerAdvice注解的使用.全局异常捕获.自定义异常捕获 参考文章: (1)Spring boot异常统一处理方法:@ControllerAd ...

  9. 【python】-- try except (异常捕获)、断言

    [python]-- try except (异常捕获).断言 参考文章: (1)[python]-- try except (异常捕获).断言 (2)https://www.cnblogs.com/ ...

最新文章

  1. Google Maps打开出现internal error错误
  2. python 报错 bs4 FeatureNotFound: Couldn‘t find a tree builder with the features you requested: lxml
  3. python爬取贴吧所有标题的评论_用BS4爬取贴吧文章的作者信息时,如何兼顾爬取高亮的作者信息?...
  4. java对redis的基本操作
  5. oracle 11g 环境,Linux彻底清理Oracle 11g RAC环境方案
  6. Docker自动构建开发测试平台
  7. DevOps on DevCloud|代码检查服务如何降低“Billion Dollar Mistake” NPE风险
  8. 微信小程序微商城(七):动态API实现商品分类
  9. 嵌入式学习文章推荐+资料下载
  10. Windows软件打包方法
  11. ad采样的符号位_AD采样后数据如何在FPGA中转化为有符号数
  12. 集线器故障诊断与排除
  13. IdPop3 出现 Max line length exceeded.的解决方法
  14. 燃烧你的大脑,10个创意机器人闹翻天!
  15. 阿里云与线下IDC对接IPsec虚拟专用网络
  16. sklearn包使用Extra-Trees和GridSearchCV完成成人死亡率预测
  17. img lazyload chrome
  18. 魔力宝贝高清单机计划(一) 图库提取
  19. activemq后台管理 看topic消息_消息队列之ActiveMQ
  20. FPG-超越FPN/NAS-FPN的表现 | Feature Pyramid Grids

热门文章

  1. php二维数组按照自定义方式对键值排序,PHP 对一个给定的二维数组按照指定的键值进行排序...
  2. 关于上拉电阻的使用总结
  3. php7取系统信息,操作系统-如何获取运行PHP的操作系统?
  4. bigdecimal正确用法_BigDecimal用法详解
  5. stm32l0的停止模式怎么唤醒_汇聚力量,守护安全:2020 “AnQ唤醒云课堂”圆满收官!...
  6. IC/FPGA笔试题分析(六)用16bit加法器IP核实现8bit乘法运算(文末彩蛋)
  7. 【 FPGA 】Vivado和ISE设计流程比较(重点是Vivado IDE)
  8. 一些实用的 jQuery 技巧
  9. (转)OpenCV版本的摄像机标定
  10. 基于Windows 2008 R2 Core的SQL Server 2008 R2 Cluster部署(Step by Step)