📜  laravel 维护模式自定义类 - PHP (1)

📅  最后修改于: 2023-12-03 15:32:35.822000             🧑  作者: Mango

Laravel 维护模式自定义类

在 Laravel 中,默认情况下维护模式会显示一个简单的页面来提示用户网站正在维护中。但是有时候我们可能需要自定义维护模式页面,这时候我们可以通过自定义类来实现。

创建自定义类

首先,我们需要在 app 文件夹下创建一个新的文件夹 Http/Middleware/Lockout,并在该文件夹中创建一个名为 CustomDownForMaintenance.php 的 PHP 文件,代码如下:

<?php

namespace App\Http\Middleware\Lockout;

use Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode;

class CustomDownForMaintenance extends CheckForMaintenanceMode
{  
    /**
     * Get the path to the artwork.
     *
     * @return string
     */
    protected function artworkPath()
    {
        return public_path('img/custom-maintenance.png');
    }

    /**
     * Create a new Symfony response for the given exception.
     *
     * @param  \Exception  $e
     * @return \Symfony\Component\HttpFoundation\Response
     */
    protected function convertExceptionToResponse($e)
    {
        if ($this->isHttpException($e)) {
            $status = $e->getStatusCode();

            if (view()->exists("errors.{$status}")) {
                return response()->view("errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
            }
        }

        return response()->view('errors.500', ['exception' => $e], 500, $e->getHeaders());
    }
}

上述代码继承了 CheckForMaintenanceMode 类,我们可以根据需求,自定义其中的两个函数。

自定义艺术品路径

默认情况下,维护模式页面的艺术品为框架自带的 public/img/503-bg.png 文件。我们可以通过自定义 artworkPath() 函数来修改该文件路径,代码如下:

/**
* Get the path to the artwork.
*
* @return string
*/
protected function artworkPath()
{
    return public_path('img/custom-maintenance.png');
}

可以看到,在上述代码中,我们将艺术品路径修改为 public/img/custom-maintenance.png

自定义异常响应

当程序出现异常时,我们可以自定义异常响应页面。默认情况下,如果程序出现异常,维护模式页面会显示错误代码 500。我们可以通过自定义 convertExceptionToResponse() 函数来修改该响应。

/**
* Create a new Symfony response for the given exception.
*
* @param  \Exception  $e
* @return \Symfony\Component\HttpFoundation\Response
*/
protected function convertExceptionToResponse($e)
{
    if ($this->isHttpException($e)) {
        $status = $e->getStatusCode();

        if (view()->exists("errors.{$status}")) {
            return response()->view("errors.{$status}", ['exception' => $e], $status, $e->getHeaders());
        }
    }

    return response()->view('errors.500', ['exception' => $e], 500, $e->getHeaders());
}

可以看到,上述代码中通过修改 'errors.500' 来自定义异常响应的页面。你也可以根据需求自定义其他的错误响应页面。

使用自定义类

为了使用上述自定义类,我们需要在 App\Http\Kernel 中注册自己的中间件。在 $middleware 数组中添加 Lockout\CustomDownForMaintenance::class,代码如下:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
    \App\Http\Middleware\TrimStrings::class,
    \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    \App\Http\Middleware\TrustProxies::class,
    \App\Http\Middleware\Lockout\CustomDownForMaintenance::class,
];

以上代码中,我们在 $middleware 数组中添加了 \App\Http\Middleware\Lockout\CustomDownForMaintenance::class 中间件。现在,我们的自定义类就已经完成了。

总结

在 Laravel 应用程序的保护期间,维护模式显示的默认页面可能不一定适合你的需求。在这种情况下,Laravel 允许你使用自定义的类来配置维护模式页面。

自定义类有许多选项可供玩家使用,包括自定义艺术品路径、自定义异常响应等。使用自定义类,让你的维护模式页面真正符合你的需求,且具有更高的独特性。