摘要:所以,現(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) session,cookie,身份驗(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
摘要:表示該頁(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...
摘要:表示該頁(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...
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è)...
摘要:已經(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安裝及使...
摘要:已經(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安裝及使...
閱讀 1020·2021-11-25 09:43
閱讀 2326·2019-08-30 15:55
閱讀 3180·2019-08-30 15:44
閱讀 2086·2019-08-29 16:20
閱讀 1477·2019-08-29 12:12
閱讀 1639·2019-08-26 12:19
閱讀 2315·2019-08-26 11:49
閱讀 1744·2019-08-26 11:42