Lumen如何实现类Laravel5用户友好的错误页面
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Lumen如何实现类Laravel5用户友好的错误页面,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2678字,纯文字阅读大概需要4分钟。
内容图文
![Lumen如何实现类Laravel5用户友好的错误页面](/upload/InfoBanner/zyjiaocheng/207/a177b5aa2af64d4cb71ec35b003afa91.jpg)
Lumen如何实现类Laravel5用户友好的错误页面Laravel5实现用户友好的错误页面非常简单,例如想要返回status 404,只需要在view/errors中添加一个404.blade.php文件即可。Lumen中没有默认实现这种便利,于是自己添加一个。
原理
抛出错误的函数是abort(), 进入该函数一看究竟,会发现只是抛出一个HttpException. 在Application中,处理http request的时候,有一个try catch的过程,Exception就是在这里被捕获的。
try { return $this->sendThroughPipeline($this->middleware, function () use ($method, $pathInfo) { if (isset($this->routes[$method.$pathInfo])) { return $this->handleFoundRoute([true, $this->routes[$method.$pathInfo]['action'], []]); } return $this->handleDispatcherResponse( $this->createDispatcher()->dispatch($method, $pathInfo) ); });} catch (Exception $e) { return $this->sendExceptionToHandler($e);}
接着可以看出,Exception是交给了sendExceptionToHandler去处理了。这里的handler具体是哪个类呢?是实现了Illuminate\Contracts\Debug\ExceptionHandler的一个单例。为啥说他是单例?因为在bootstrap的时候,已经初始化为单例了,请看。
$app->singleton( Illuminate\Contracts\Debug\ExceptionHandler::class, App\Exceptions\Handler::class);
进入该类看一下,他有一个render方法,好吧,找到问题所在了,修改一下这个方法即可。
public function render($request, Exception $e){ return parent::render($request, $e);}
动手修改
由于Laravel已经有实现了,所以最简便的方法就是复制黏贴。在render中先判断下是否为HttpException, 如果是,就去errors目录下找对应status code的view,如果找到,就渲染它输出。就这么简单。修改Handler如下:
/** * 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( !env('APP_DEBUG') and $this->isHttpException($e)) { return $this->renderHttpException($e); } return parent::render($request, $e);}/** * Render the given HttpException. * * @param \Symfony\Component\HttpKernel\Exception\HttpException $e * @return \Symfony\Component\HttpFoundation\Response */protected function renderHttpException(HttpException $e){ $status = $e->getStatusCode(); if (view()->exists("errors.{$status}")) { return response(view("errors.{$status}", []), $status); } else { return (new SymfonyExceptionHandler(env('APP_DEBUG', false)))->createResponse($e); }}/** * Determine if the given exception is an HTTP exception. * * @param \Exception $e * @return bool */protected function isHttpException(Exception $e){ return $e instanceof HttpException;}
好了,在errors目录下新建一个404.blade.php文件,在controller中尝试 abort(404)看一下吧。
内容总结
以上是互联网集市为您收集整理的Lumen如何实现类Laravel5用户友好的错误页面全部内容,希望文章能够帮你解决Lumen如何实现类Laravel5用户友好的错误页面所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。