You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定期禁用Laravel应用?夜间禁用日间恢复方案咨询

Laravel 夜间禁用、日间开放的优雅实现方案

比起你原本计划的在路由里用二进制变量触发全捕获路由,用自定义全局中间件是更贴合Laravel设计思路的优雅解法——它能把访问时间校验的逻辑和路由配置彻底分开,维护起来更省心,复用性也更强。

具体实现步骤

1. 生成自定义中间件

先运行Artisan命令创建中间件:

php artisan make:middleware CheckAccessTime

打开生成的app/Http/Middleware/CheckAccessTime.php,写入时间校验逻辑:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;

class CheckAccessTime
{
    public function handle(Request $request, Closure $next): Response
    {
        // 可以直接写死时段,也可以从配置文件读取(推荐后者,方便随时修改)
        $startHour = config('app.access_start', 8);
        $endHour = config('app.access_end', 20);
        $currentHour = now()->hour;

        // 不在允许时段的话,返回维护页面或提示信息
        if ($currentHour < $startHour || $currentHour >= $endHour) {
            // 返回自定义夜间关闭页面
            return response()->view('maintenance.night', [], 503);
            // 如果是API接口,可返回JSON:return response()->json(['msg' => '应用夜间已关闭'], 503);
        }

        return $next($request);
    }
}

2. 注册中间件

打开app/Http/Kernel.php,把这个中间件加到全局中间件数组里,这样所有请求都会经过校验:

protected $middleware = [
    // ... 其他已有的中间件
    \App\Http\Middleware\CheckAccessTime::class,
];

要是只想给部分路由生效(比如仅限制web端),就把它加到$middlewareGroups的web组里即可。

3. 配置可修改的时段(可选)

在config/app.php里添加两个配置项,不用改代码就能调整开放时段:

return [
    // ... 其他配置内容
    'access_start' => env('APP_ACCESS_START', 8),
    'access_end' => env('APP_ACCESS_END', 20),
];

然后在.env文件里就能快速修改:

APP_ACCESS_START=8
APP_ACCESS_END=20

4. 创建夜间关闭页面(可选)

在resources/views/maintenance/night.blade.php里写个简单的提示页:

<!DOCTYPE html>
<html>
<head>
    <title>应用夜间休息中</title>
</head>
<body>
    <h1>抱歉,应用当前处于夜间关闭状态</h1>
    <p>我们每日8:00-20:00开放访问,感谢您的理解~</p>
</body>
</html>

为啥这个方案更优?

  • 逻辑分离:路由只负责定义路由规则,校验逻辑单独放在中间件,代码结构更清晰
  • 灵活度高:想全局生效就全局注册,想只限制部分路由就分组注册,时段改配置就能生效
  • 扩展性强:后续要加例外IP、特殊路由白名单,直接在中间件里扩展逻辑即可
  • 符合框架习惯:Laravel的中间件就是用来处理这类请求前置校验的,团队成员一看就懂

内容的提问来源于stack exchange,提问作者Peter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:37:12