【问题标题】:Maintenance mode in public page not in admin page [Laravel]公共页面中的维护模式不在管理页面中[Laravel]
【发布时间】:2016-03-18 08:35:48
【问题描述】:

现在我正在处理 laravel web 项目,管理页面上有将 web 设置为维护模式的功能,但是这个维护只是停止处理公共页面中的请求,我试图制作中间件,所以所有路由或如果设置为维护模式,则处理公共页面的控制器将停止。 (设置保存在具有“在线”或“维护”值的数据库中)

public function handle($request, Closure $next, $guard = null){
    // retrieve setting from database and turn into key value array
    if($site_settings['status'] == 'maintenance'){
        return response()->view('errors.500', [], 500);
    }

    return $next($request);
}

我的方法有什么不正确的地方?

【问题讨论】:

    标签: php laravel-5


    【解决方案1】:

    你在Kernel.php注册你的中间件了吗?

    您需要将其添加到app/Http/Kernel.php,在全局中间件注释下:

    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
        \App\Http\Middleware\YourMiddlewareClass::class, // add it here
    ];
    

    并在app/Http/Middleware 中创建一个带有公共函数handle 的中间件类

    <?php
    namespace App\Http\Middleware;
    
    class YourMiddlewareClass
    {
        public function handle($request, Closure $next, $guard = null){
            if ( $site_settings['status'] == 'maintenance' && !$request->is('admin/*') ){
                return response()->view('errors.500', [], 500);
            }
           
            return $next($request);
        }
    }
    

    这将对 URL 中不以 admin/ 开头的任何内容强制错误 500。

    【讨论】:

    • 抱歉,我已经用其他代码更新了我的答案以提供帮助。
    • 嗯,我可以从全局中删除 !$request-&gt;is('admin/*') 并在公共页面路由上添加中间件,谢谢 btw..
    • 是的,无论哪种方式都可以。使用作为全局中间件可以省去更新路由文件的麻烦,但这是您的偏好。
    猜你喜欢
    • 1970-01-01
    • 2015-12-06
    • 2020-08-14
    • 1970-01-01
    • 2021-12-15
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多