不使用try catch而使用全局异常处理的问题
来源:6-16 登录优化- 控制器业务代码抽离到business层(最新)

slybootslion
2020-03-25
如果在Login控制器中不使用try catch的方法捕获异常,而是使用第四章中所讲的全局异常处理(在模块下新建exception文件夹,定义异常处理类,然后用provider.php文件引入的方式),会出现一些问题,比如:在登录之后,重新回到login页面,页面会抛出异常:
我检查了一下,是因为在Login控制器中,通过调用父类 AdminBase 中的 redirect方法跳转,而这个父类中的redirect方法是使用一个抛出异常的方式来跳转页面的:
这个抛出的异常最终被全局异常处理捕获,所以造成我上面说到的问题。
按照我的习惯,我是不愿意用try catch,因为这种方式有可能忘了漏写,而且以后写的多了,可能到处都是try catch让代码不易阅读,一般我都会用全局异常处理的方式。
如果我不使用try catch,就没有办法使用继承AdminBase类来判断是否登录的方式,因为这个基类跳转页面都是这种抛出异常的方式处理。
所以我注释了Login控制器中的判断,使用中间件的方式来做是否登录的判断:
我发现中间件中判断的方式非常繁琐,因为现在项目比较简单,只需要判断登录、没有登录这两种情况,如果项目很复杂,在前置中间件中所作的判断就非常多。
问题就是:
如果使用全局异常处理的方式,有什么更好的方法来处理这种中间件对登录情况的判断(更好的判断方式,或者更好的写法)?
写回答
1回答
-
slybootslion
提问者
2020-03-26
7-17章看到解决方法了。
012020-03-29
相似问题
关于在哪一层捕获异常的问题
回答 1
关于异常的自然抛出和手动抛出
回答 2