成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

使用 Laravel 5.5+ 更好的來(lái)實(shí)現(xiàn) 404 響應(yīng)

pepperwang / 2505人閱讀

摘要:所以,現(xiàn)在我們可以使用具有正常頁(yè)面和頁(yè)腳的應(yīng)用布局,來(lái)替代簡(jiǎn)單的視圖,同時(shí)還能給用戶(hù)顯示一條友好的提示信息。

譯文首發(fā)于 使用 Laravel 5.5+ 更好的來(lái)實(shí)現(xiàn) 404 響應(yīng),轉(zhuǎn)載請(qǐng)注明出處!

Laravel 5.5.10 封裝了兩個(gè)有用的路由器方法,可以幫助我們?yōu)橛脩?hù)提供更好的 404 頁(yè)面?,F(xiàn)在,當(dāng)拋出 404 異常時(shí),Laravel 會(huì)顯示一個(gè)漂亮的 404.blade.php 視圖文件,你可以自定義顯示給用戶(hù) UI,但在該視圖中,你無(wú)權(quán)訪問(wèn) sessioncookie,身份驗(yàn)證(auth)等...

在 laravel 5.5.10 中,我們有一個(gè)新的 Route::fallback() 方法,用于定義當(dāng)沒(méi)有其他路由與請(qǐng)求匹配時(shí) Laravel 回退的路由。

Route::fallback(function () {
    return "Sorry" . auth()->user()->name . "! This page does not exist.";
});

所以,現(xiàn)在我們可以使用具有正常頁(yè)面和頁(yè)腳的應(yīng)用布局,來(lái)替代簡(jiǎn)單的 404 視圖,同時(shí)還能給用戶(hù)顯示一條友好的提示信息。

Route::fallback(function() {
    return response()->view("notFound", [], 404);
});
@extends("layout.app")

@section("content")
    

Sorry! this page doesn"t exist.

@stop

當(dāng) Laravel 渲染這個(gè)回退(fallback)路由時(shí),會(huì)運(yùn)行所有的中間件,因此當(dāng)你在 web.php 路由文件中定義了回退路由時(shí),所有處在 web 中間件組的中間件都會(huì)被執(zhí)行,這樣我們就可以獲取 session 數(shù)據(jù)了。

API 接口說(shuō)明

現(xiàn)在當(dāng)你點(diǎn)擊 /non-existing-page 時(shí),你會(huì)看到在回退路由中定義的視圖,甚至當(dāng)你點(diǎn)擊 /api/non-existing-endpoint 時(shí),如果你也不想提供這個(gè)接口,你可以到 api 回退路由中定義 JSON 響應(yīng),讓我們到 api.php 路由文件中定義另外一個(gè)回退路由:

Route::fallback(function() {
    return response()->json(["message" => "Not Found!]);
});

由于 api 中間件組帶有 /api 前綴,所有帶有 /api 前綴的未定義的路由,都會(huì)進(jìn)入到 api.php 路由文件中的回退路由,而不是 web.php 路由文件中所定義的那個(gè)。

使用 abort(404) 和 ModelNotFound 異常

當(dāng)使用 abort(404) 時(shí)會(huì)拋出一個(gè) NotFoundHttpException,此時(shí)處理器會(huì)為我們渲染出 404.blade.php 視圖文件,同樣的 ModelNotFoundException 異常也會(huì)做同樣的處理,那么我們應(yīng)該如何如何處理才能在更好的渲染出回退路由的視圖,而不是一個(gè)普通的視圖呢?

class Handler extends ExceptionHandler
{
    public function render($request, Exception $exception)
    {
        if ($exception instanceof NotFoundHttpException) {
            return Route::responseWithRoute("fallback");
        }

        if ($exception instanceof ModelNotFoundException) {
            return Route::responseWithRoute("fallback");
        }

        return parent::render($request, $exception);
    }
}

Route::respondWithRoute("fallback") 回去跑名為 fallback 的路由,我們可以像下面這樣為回退路由命名:

Route::fallback(function() {
    return response()->view("notFound", [], 404);
})->name("fallback");

甚至,你還可以為特定的資源指定回退路由:

if ($exception instanceof ModelNotFoundException) {
    return $exception->getModel() == Server::class
                ? Route::respondWithRoute("serverFallback") 
                : Route::respondWithRoute("fallback");
}

現(xiàn)在我們需要在路由文件中定義這個(gè)回退路由:

Route::fallback(function(){
    return "We could not find this server, there are other ". auth()->user()->servers()->count() . " under your account ......";
})->name("serverFallback");
原文

Better 404 responses using Laravel 5.5+

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29379.html

相關(guān)文章

  • Laravel 5.5 官方推薦 Nginx 配置學(xué)習(xí)

    摘要:表示該頁(yè)面可以在相同域名頁(yè)面的中展示。表示允許過(guò)濾器,指示瀏覽器在檢測(cè)到攻擊后禁止加載整個(gè)頁(yè)面。該文件也確實(shí)沒(méi)有必要記錄到日志中,而且大部分網(wǎng)站并不存在文件。 Laravel 5.5 版本官方放出了 Nginx 服務(wù)器的配置,中文文檔:服務(wù)器配置 Nginx server { listen 80; server_name example.com; root /e...

    mating 評(píng)論0 收藏0
  • Laravel 5.5 官方推薦 Nginx 配置學(xué)習(xí)

    摘要:表示該頁(yè)面可以在相同域名頁(yè)面的中展示。表示允許過(guò)濾器,指示瀏覽器在檢測(cè)到攻擊后禁止加載整個(gè)頁(yè)面。該文件也確實(shí)沒(méi)有必要記錄到日志中,而且大部分網(wǎng)站并不存在文件。 Laravel 5.5 版本官方放出了 Nginx 服務(wù)器的配置,中文文檔:服務(wù)器配置 Nginx server { listen 80; server_name example.com; root /e...

    v1 評(píng)論0 收藏0
  • PHP / Laravel API 開(kāi)發(fā)推薦閱讀清單

    showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區(qū)優(yōu)秀文章 Laravel 5.5+passport 放棄 dingo 開(kāi)發(fā) API 實(shí)戰(zhàn),讓 API 開(kāi)發(fā)更省心 - 自造車(chē)輪。 API 文檔神器 Swagger 介紹及在 PHP 項(xiàng)目中使用 - API 文檔撰寫(xiě)方案 推薦 Laravel API 項(xiàng)目必須使用的 8 個(gè)...

    shmily 評(píng)論0 收藏0
  • 使用docker搭建laravel開(kāi)發(fā)環(huán)境

    摘要:已經(jīng)集成需要使用的環(huán)境,只需要簡(jiǎn)單修改配置就能搭建環(huán)境提供開(kāi)發(fā),對(duì)開(kāi)發(fā)及管理來(lái)說(shuō)真是一味良方。目前能正常訪問(wèn)文件。 為何用docker? 在電腦還是window系統(tǒng)的時(shí)候,經(jīng)常需要基于vm服務(wù)搭建一套環(huán)境才能更好地(應(yīng)該是更貼近線上環(huán)境)進(jìn)行開(kāi)發(fā),而現(xiàn)在在docker的神秘光環(huán)底下已經(jīng)能實(shí)現(xiàn)用最小的資源搭建本地開(kāi)發(fā)環(huán)境,同時(shí)能更好地遷移到其他地方。 前置知識(shí) 了解docker安裝及使...

    fish 評(píng)論0 收藏0
  • 使用docker搭建laravel開(kāi)發(fā)環(huán)境

    摘要:已經(jīng)集成需要使用的環(huán)境,只需要簡(jiǎn)單修改配置就能搭建環(huán)境提供開(kāi)發(fā),對(duì)開(kāi)發(fā)及管理來(lái)說(shuō)真是一味良方。目前能正常訪問(wèn)文件。 為何用docker? 在電腦還是window系統(tǒng)的時(shí)候,經(jīng)常需要基于vm服務(wù)搭建一套環(huán)境才能更好地(應(yīng)該是更貼近線上環(huán)境)進(jìn)行開(kāi)發(fā),而現(xiàn)在在docker的神秘光環(huán)底下已經(jīng)能實(shí)現(xiàn)用最小的資源搭建本地開(kāi)發(fā)環(huán)境,同時(shí)能更好地遷移到其他地方。 前置知識(shí) 了解docker安裝及使...

    JouyPub 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<