[教程] 如何自定义 Laravel 的 404 页面

Laravel

在本次教程中,我们将看到如何在 Laravel 中自定义 404 页面。

PHP 异常类似于其他编程语言中的异常,发生错误或未知事件时引发异常。 PHP 中所有异常都继承自基本的 Exception 类。

Laravel 提供了 app/Exceptions/Handler.php 类,用于检查应用程序中抛出的所有异常。基本上,应用程序中抛出的每个异常都可以配置在这个文件中,并且生成适当的响应。

在本次教程中,我们将看到如何在 Laravel 中自定义 404 页面。我们使用的版本是 Laravel 5.6 。默认情况下, Laravel 返回一个 Whoops 页面。我们将看到如何根据异常返回自定义页面,这将帮助你为每个 HTTP 异常返回自定义页面。

当有人点击不存在的路由时,你的站点会显示一个错误,它也会影响你的 SEO 。

所以,让我们看看如何在 Laravel 中如何管理 404 页面,HTTP 异常和自定义异常。

安装 Laravel 项目

让我们创建一个新的 Laravel 项目,运行以下命令来创建名为 errors 的一个新项目。

composer create-project --prefer-dist laravel/laravel errors

处理异常

所有与处理异常相关的更改都将在 app/Exceptions/Handler.php 中完成。当出现一个错误时,我们将返回一个 视图

自定义 404 页面

让我们在 Laravel 中创建一个自定义的 404 页面。在 app/Exceptions/Handler.php 文件中修改 render 方法。

/**
 * 在 HTTP 响应中渲染异常
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $exception
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $exception)
{
    if ($this->isHttpException($exception)) {
        if ($exception->getStatusCode() == 404) {
            return response()->view('errors.' . '404', [], 404);
        }
    }

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

render 方法中,我们检查异常是否是一个 HTTP 异常,这很重要,因为我们正在调用 getStatusCode() 方法,该方法只在 HTTP 异常中可用。如果状态码为 404 ,则返回一个视图 errors.404 以及一个状态码。如果需要你可以更改视图的名称。

我们必须为 404 页创建一个视图,所以,我们创建一个新的视图 errors/404.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Page not found - 404</title>
</head>
<body>

The page your looking for is not available

</body>
</html>

如果你想要为其他 HTTP 异常创建一个自定义页面,只需添加一个新的 if 语句,并用新的状态码更改 404 。这是处理 404 和 500 状态码自定义页面的 render 方法。

public function render($request, Exception $exception)
{
    if ($this->isHttpException($exception)) {
        if ($exception->getStatusCode() == 404) {
            return response()->view('errors.' . '404', [], 404);
        }

        if ($exception->getStatusCode() == 500) {
            return response()->view('errors.' . '500', [], 500);
        }
    }

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

这是我们应用程序的 404 响应。

custom 404 page laravel

自定义 HTTP 异常页面

我们也可以自动化这个过程,如果我们只需要为异常创建一个新的视图文件,那就太好了,对于每个 HTTP 异常都不再需要向 app/Exceptions/Handler.php 文件中添加代码。在 app/Exceptions/Handler.php 文件中修改 render 方法。

public function render($request, Exception $exception)
{
    if ($this->isHttpException($exception)) {
        if (view()->exists('errors.' . $exception->getStatusCode())) {
            return response()->view('errors.' . $exception->getStatusCode(), [], $exception->getStatusCode());
        }
    }

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

现在,你只需要创建一个带有异常 状态码视图render 方法将会检查 视图 是否与异常的状态码一同存在。如果视图存在,它将会简单的返回一个 HTTP 响应,其中包含该视图和 状态码

例如,我们为 404 错误页面创建 errors/404.blade.php ,为 500 错误页面创建 errors/500.blade.php 等等。

处理自定义异常

我们先创建一个 自定义异常 。运行以下代码来创建一个名为 TestingHttpException 的异常。

php artisan make:exception TestingHttpException

在  app/Exceptions/Handler.php  文件中,修改 render 方法。

public function render($request, Exception $exception)
{
    if ($exception instanceof TestingHttpException) {
        return response()->view('errors.testing');
    }
    return parent::render($request, $exception);
}

如果异常是 TestingHttpException 的实例,它将返回 errors.testing 视图。

你还可以使用带有 404 代码的 abort 方法,它将为 HTTP 响应提供自定义的 404 页面。

你还可以使用这些技术来处理所有类型的异常。


Practice makes perfect.

原文地址:https://tutsforweb.com/how-to-create-cus...

译文地址:https://learnku.com/laravel/t/27873

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 1

这文章有点。。 :speak_no_evil: :speak_no_evil:

3周前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会