摘要:實現(xiàn)用戶友好的錯誤頁面非常簡單,例如想要返回,只需要在中添加一個文件即可。如何實現(xiàn)類用戶友好的錯誤頁面原理拋出錯誤的函數(shù)是進入該函數(shù)一看究竟,會發(fā)現(xiàn)只是拋出一個在中,處理的時候,有一個的過程,就是在這里被捕獲的。
Lumen如何實現(xiàn)類Laravel5用戶友好的錯誤頁面 原理Laravel5實現(xiàn)用戶友好的錯誤頁面非常簡單,例如想要返回status 404,只需要在view/errors中添加一個404.blade.php文件即可。Lumen中沒有默認實現(xiàn)這種便利,于是自己添加一個。
拋出錯誤的函數(shù)是abort(), 進入該函數(shù)一看究竟,會發(fā)現(xiàn)只是拋出一個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具體是哪個類呢?是實現(xiàn)了IlluminateContractsDebugExceptionHandler的一個單例。為啥說他是單例?因為在bootstrap的時候,已經(jīng)初始化為單例了,請看。
$app->singleton( IlluminateContractsDebugExceptionHandler::class, AppExceptionsHandler::class );
進入該類看一下,他有一個render方法,好吧,找到問題所在了,修改一下這個方法即可。
public function render($request, Exception $e) { return parent::render($request, $e); }動手修改
由于Laravel已經(jīng)有實現(xiàn)了,所以最簡便的方法就是復制黏貼。在render中先判斷下是否為HttpException, 如果是,就去errors目錄下找對應status code的view,如果找到,就渲染它輸出。就這么簡單。修改Handler如下:
/** * Render an exception into an HTTP response. * * @param IlluminateHttpRequest $request * @param Exception $e * @return IlluminateHttpResponse */ 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 SymfonyComponentHttpKernelExceptionHttpException $e * @return SymfonyComponentHttpFoundationResponse */ 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)看一下吧。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21124.html
摘要:之前受到這篇為你的站點插上的翅膀的啟發(fā)就嘗試在中引入,并完成中文索引。關于中文索引谷歌上關于中文搜索的文章有很多,例如這篇。中文索引中涉及的內(nèi)容比較多,下次再用一個篇幅來分析。 如何在Lumen中使用Elasticsearch 前言 Lumen是基于Laravel核心組件的微框架,隨著Laravel5的發(fā)布,目前版本也已經(jīng)到5了。之前受到這篇為你的站點插上ElasticSearch...
摘要:打開瀏覽器輸入,如無意外,將出現(xiàn)如下圖,表示框架安裝成功。四系統(tǒng)內(nèi)部后臺管理系統(tǒng)這個是框架自帶的后臺登錄管理系統(tǒng),只需要簡單的命令即可運行。出現(xiàn)上圖即為,創(chuàng)建模型成功。 在PHP個各種web開發(fā)框架中,laravel算是一款簡潔、優(yōu)雅的開發(fā)框架,本人也剛剛接觸到laravel,通過學習大神們的一些文章,下面是我的一些心得體會,希望可以給初學者一些幫助,大家一起進步。言歸正傳: 本人環(huán)境...
摘要:現(xiàn)在的提供了一種更易于使用和維護的計劃任務方式。注意事項建議開啟這樣會極大的加速類的加載。 lumen 為速度而生的 Laravel 框架 官網(wǎng)的介紹很簡潔,而且 lumen 確實也很簡單,我在調(diào)研了 lumen 相關組件(比如緩存,隊列,校驗,路由,中間件和最重要的容器)之后認為已經(jīng)能夠滿足我目前這個微服務的需求了。 任務目標 showImg(https://segmentfault...
摘要:下邊是服務容器工作示意圖服務容器的產(chǎn)生框架中,服務容器是由中類完成的,該類實現(xiàn)了服務容器的核心功能。并不是框架中所有的類都能實現(xiàn)自動依賴注入的功能只有服務容器創(chuàng)建的類實例才能實現(xiàn)依賴自動注入。框架中的服務容器是全局的,不需要 1.服務容器 服務容器是Lumen框架整個系統(tǒng)功能調(diào)度配置的核心,它提供了整個框架運行過程中的一系列服務。服務容器就是提供服務(服務可以理解為系統(tǒng)運行中需要的東西...
閱讀 2596·2023-04-25 15:07
閱讀 705·2021-11-24 10:21
閱讀 2299·2021-09-22 10:02
閱讀 3517·2019-08-30 15:43
閱讀 3222·2019-08-30 13:03
閱讀 2287·2019-08-29 17:18
閱讀 3586·2019-08-29 17:07
閱讀 1873·2019-08-29 12:27