摘要:所以,现在我们可以使用具有正常页面和页脚的应用布局,来替代简单的视图,同时还能给用户显示一条友好的提示信息。
译文首发于 使用 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+
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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安装及使...
阅读 883·2021-11-25 09:43
阅读 2246·2019-08-30 15:55
阅读 3121·2019-08-30 15:44
阅读 2009·2019-08-29 16:20
阅读 1417·2019-08-29 12:12
阅读 1584·2019-08-26 12:19
阅读 2231·2019-08-26 11:49
阅读 1676·2019-08-26 11:42