摘要:所以,現在我們可以使用具有正常頁面和頁腳的應用布局,來替代簡單的視圖,同時還能給用戶顯示一條友好的提示信息。
譯文首發于 使用 Laravel 5.5+ 更好的來實現 404 響應,轉載請注明出處!
Laravel 5.5.10 封裝了兩個有用的路由器方法,可以幫助我們為用戶提供更好的 404 頁面。現在,當拋出 404 異常時,Laravel 會顯示一個漂亮的 404.blade.php 視圖文件,你可以自定義顯示給用戶 UI,但在該視圖中,你無權訪問 session,cookie,身份驗證(auth)等...
在 laravel 5.5.10 中,我們有一個新的 Route::fallback() 方法,用于定義當沒有其他路由與請求匹配時 Laravel 回退的路由。
Route::fallback(function () { return "Sorry" . auth()->user()->name . "! This page does not exist."; });
所以,現在我們可以使用具有正常頁面和頁腳的應用布局,來替代簡單的 404 視圖,同時還能給用戶顯示一條友好的提示信息。
Route::fallback(function() { return response()->view("notFound", [], 404); });
@extends("layout.app") @section("content")Sorry! this page doesn"t exist.
@stop
當 Laravel 渲染這個回退(fallback)路由時,會運行所有的中間件,因此當你在 web.php 路由文件中定義了回退路由時,所有處在 web 中間件組的中間件都會被執行,這樣我們就可以獲取 session 數據了。
API 接口說明現在當你點擊 /non-existing-page 時,你會看到在回退路由中定義的視圖,甚至當你點擊 /api/non-existing-endpoint 時,如果你也不想提供這個接口,你可以到 api 回退路由中定義 JSON 響應,讓我們到 api.php 路由文件中定義另外一個回退路由:
Route::fallback(function() { return response()->json(["message" => "Not Found!]); });
由于 api 中間件組帶有 /api 前綴,所有帶有 /api 前綴的未定義的路由,都會進入到 api.php 路由文件中的回退路由,而不是 web.php 路由文件中所定義的那個。
使用 abort(404) 和 ModelNotFound 異常當使用 abort(404) 時會拋出一個 NotFoundHttpException,此時處理器會為我們渲染出 404.blade.php 視圖文件,同樣的 ModelNotFoundException 異常也會做同樣的處理,那么我們應該如何如何處理才能在更好的渲染出回退路由的視圖,而不是一個普通的視圖呢?
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"); }
現在我們需要在路由文件中定義這個回退路由:
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+
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29379.html
摘要:表示該頁面可以在相同域名頁面的中展示。表示允許過濾器,指示瀏覽器在檢測到攻擊后禁止加載整個頁面。該文件也確實沒有必要記錄到日志中,而且大部分網站并不存在文件。 Laravel 5.5 版本官方放出了 Nginx 服務器的配置,中文文檔:服務器配置 Nginx server { listen 80; server_name example.com; root /e...
摘要:表示該頁面可以在相同域名頁面的中展示。表示允許過濾器,指示瀏覽器在檢測到攻擊后禁止加載整個頁面。該文件也確實沒有必要記錄到日志中,而且大部分網站并不存在文件。 Laravel 5.5 版本官方放出了 Nginx 服務器的配置,中文文檔:服務器配置 Nginx server { listen 80; server_name example.com; root /e...
showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區優秀文章 Laravel 5.5+passport 放棄 dingo 開發 API 實戰,讓 API 開發更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項目中使用 - API 文檔撰寫方案 推薦 Laravel API 項目必須使用的 8 個...
摘要:已經集成需要使用的環境,只需要簡單修改配置就能搭建環境提供開發,對開發及管理來說真是一味良方。目前能正常訪問文件。 為何用docker? 在電腦還是window系統的時候,經常需要基于vm服務搭建一套環境才能更好地(應該是更貼近線上環境)進行開發,而現在在docker的神秘光環底下已經能實現用最小的資源搭建本地開發環境,同時能更好地遷移到其他地方。 前置知識 了解docker安裝及使...
摘要:已經集成需要使用的環境,只需要簡單修改配置就能搭建環境提供開發,對開發及管理來說真是一味良方。目前能正常訪問文件。 為何用docker? 在電腦還是window系統的時候,經常需要基于vm服務搭建一套環境才能更好地(應該是更貼近線上環境)進行開發,而現在在docker的神秘光環底下已經能實現用最小的資源搭建本地開發環境,同時能更好地遷移到其他地方。 前置知識 了解docker安裝及使...
閱讀 965·2021-11-25 09:43
閱讀 2295·2019-08-30 15:55
閱讀 3158·2019-08-30 15:44
閱讀 2057·2019-08-29 16:20
閱讀 1457·2019-08-29 12:12
閱讀 1612·2019-08-26 12:19
閱讀 2286·2019-08-26 11:49
閱讀 1717·2019-08-26 11:42