Laravel维护模式刷新和渲染参数

Laravel maintenance mode refresh and render parameter

我正在尝试通过 php artisan down 将我的应用程序置于维护模式。

php artisan down --refresh=5 工作正常,我的浏览器在 5 秒后刷新

如果我想使用 php artisan down --render="maintenance.index" 呈现自定义维护视图,它会像我希望的那样呈现位于 resources/views/maintenance/index.blade.php 的视图。

但是当我像这样使用两个参数时

php artisan down --render="maintenance.index" --refresh=5

它只是呈现自定义视图,但在 5 秒后没有刷新。我想也许我输入参数的顺序很重要。但这两种方式都行不通。

php artisan down --refresh=5 --render="maintenance.index"

是否可以在不编辑默认 503.blade.php 文件的情况下将我的应用程序置于维护模式,呈现自定义视图并每 5 秒刷新一次页面?

如果您随时需要 5 秒的时间来查看自定义维护视图,只需添加 refresh html 标签

<head>
    <title>{{ config('app.name') }}</title>
    <meta charset="utf-8">
    <meta http-equiv="refresh" content="5">
</head>

最重要的是,我不确定 laravel 中的 refresh 属性发生了什么变化以在您的模板中动态应用它,但稍后我会进一步调查今天。

编辑 1:

Laravel 存储维护模式的存根文件,但我找不到影响 refresh 参数和 render.

的结果

但是我找到了一个解决方法来归档相同的内容。 refresh 属性位于 $_SERVER['argv'] 环境变量中,可以轻松解析并添加到您的 blade 视图中:

@php
    $result = array_values(preg_grep('/(--refresh)/', array_values( $_SERVER['argv'] ) ));
    if(!empty($result)){
      $refresh = substr($result[0], strpos($result[0], "=") + 1);
    }
@endphp
<!DOCTYPE html>
<html lang="en">
<head>
    <title>{{ config('app.name') }}</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="csrf-token" content="{{ csrf_token() }}">
    @if(isset($refresh))
        <meta http-equiv="refresh" content="{{$refresh}}">
    @endif
    <!-- Fonts -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:wght@400;600;700&display=swap">
    <!-- Styles -->
    <link rel="stylesheet" href="{{ asset('css/app.css') }}">

<!-- Scripts -->
    <script src="{{ asset('js/app.js') }}" defer></script>
</head>
<body>
<!-- your content here... -->


</body>
</html>

编辑 2:

这个issue is now fixed in Laravel PR [8.x] Fix refresh during down #42217