国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Lumen如何實現(xiàn)類Laravel5用戶友好的錯誤頁面

Vicky / 2912人閱讀

摘要:實現(xiàn)用戶友好的錯誤頁面非常簡單,例如想要返回,只需要在中添加一個文件即可。如何實現(xiàn)類用戶友好的錯誤頁面原理拋出錯誤的函數(shù)是進入該函數(shù)一看究竟,會發(fā)現(xiàn)只是拋出一個在中,處理的時候,有一個的過程,就是在這里被捕獲的。

Laravel5實現(xiàn)用戶友好的錯誤頁面非常簡單,例如想要返回status 404,只需要在view/errors中添加一個404.blade.php文件即可。Lumen中沒有默認實現(xiàn)這種便利,于是自己添加一個。

Lumen如何實現(xiàn)類Laravel5用戶友好的錯誤頁面 原理

拋出錯誤的函數(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

相關文章

  • 如何Lumen中使用Elasticsearch

    摘要:之前受到這篇為你的站點插上的翅膀的啟發(fā)就嘗試在中引入,并完成中文索引。關于中文索引谷歌上關于中文搜索的文章有很多,例如這篇。中文索引中涉及的內(nèi)容比較多,下次再用一個篇幅來分析。 如何在Lumen中使用Elasticsearch 前言 Lumen是基于Laravel核心組件的微框架,隨著Laravel5的發(fā)布,目前版本也已經(jīng)到5了。之前受到這篇為你的站點插上ElasticSearch...

    jubincn 評論0 收藏0
  • windows下laravel5.5手寫教程1(適合初學者)

    摘要:打開瀏覽器輸入,如無意外,將出現(xiàn)如下圖,表示框架安裝成功。四系統(tǒng)內(nèi)部后臺管理系統(tǒng)這個是框架自帶的后臺登錄管理系統(tǒng),只需要簡單的命令即可運行。出現(xiàn)上圖即為,創(chuàng)建模型成功。 在PHP個各種web開發(fā)框架中,laravel算是一款簡潔、優(yōu)雅的開發(fā)框架,本人也剛剛接觸到laravel,通過學習大神們的一些文章,下面是我的一些心得體會,希望可以給初學者一些幫助,大家一起進步。言歸正傳: 本人環(huán)境...

    GeekGhc 評論0 收藏0
  • 基于 lumen 微服務架構(gòu)實踐

    摘要:現(xiàn)在的提供了一種更易于使用和維護的計劃任務方式。注意事項建議開啟這樣會極大的加速類的加載。 lumen 為速度而生的 Laravel 框架 官網(wǎng)的介紹很簡潔,而且 lumen 確實也很簡單,我在調(diào)研了 lumen 相關組件(比如緩存,隊列,校驗,路由,中間件和最重要的容器)之后認為已經(jīng)能夠滿足我目前這個微服務的需求了。 任務目標 showImg(https://segmentfault...

    hatlonely 評論0 收藏0
  • Lumen框架“服務容器”源碼解析

    摘要:下邊是服務容器工作示意圖服務容器的產(chǎn)生框架中,服務容器是由中類完成的,該類實現(xiàn)了服務容器的核心功能。并不是框架中所有的類都能實現(xiàn)自動依賴注入的功能只有服務容器創(chuàng)建的類實例才能實現(xiàn)依賴自動注入。框架中的服務容器是全局的,不需要 1.服務容器 服務容器是Lumen框架整個系統(tǒng)功能調(diào)度配置的核心,它提供了整個框架運行過程中的一系列服務。服務容器就是提供服務(服務可以理解為系統(tǒng)運行中需要的東西...

    ytwman 評論0 收藏0

發(fā)表評論

0條評論

Vicky

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<