【问题标题】:Laravel conditional routing based on database valueLaravel 基于数据库值的条件路由
【发布时间】:2019-09-29 21:14:57
【问题描述】:

我正在用 laravel 开发一个管理面板。我希望最终用户选择站点是否关闭(出于维护或类似目的)。 首选项将作为布尔值存储在数据库中。如果站点关闭,前端将基于此值路由到自定义视图。

(网站将托管在共享主机上,没有 SSL。不能使用工匠命令。)

目前,我可以在启动时使用 AppServiceProvider.php 的 register() 方法中的自定义方法从数据库中获取“site_is_down”值。

但我不确定如何根据路由文件中的此值路由呼叫。 我在 routes/web.php 中有两个命名路由组(前端和后端)和标准 Auth::routes()。只有前端路由应该有条件地路由。应排除后端和身份验证。 (因此用户可以访问后端面板)。

我正在尝试实现这样的目标:

(我知道这不是正确的语法,我试图解释我的想法)

<?php

if (config('global.site_is_down') === true) {
    //Route all frontend route group to maintenance view ->except(Backend and auth)
} else {
    //Route all as normal
}

【问题讨论】:

    标签: laravel routing conditional


    【解决方案1】:

    创建middleware

    <?php
    
    namespace App\Http\Middleware;
    
    use Closure;
    
    class CheckMaintainaceMode
    {
        /**
         * Handle an incoming request.
         *
         * @param  \Illuminate\Http\Request  $request
         * @param  \Closure  $next
         * @return mixed
         */
        public function handle($request, Closure $next)
        {
            if (config('global.site_is_down')/*or what ever logic you need*/) {
                return redirect('mainainance-mode-url');
            }
    
            return $next($request);
        }
    }
    
    

    然后在前端路由中使用这个中间件

    Route::get('/frontend', function () {
        //
    })->middleware('CheckMaintainaceMode');
    

    Route::group(['middleware' => ['CheckMaintainaceMode']], function () {
        //
    });
    

    【讨论】:

    • 谢谢。我已经根据自己的需要对其进行了一些调整,但这种方法完全有效。
    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 2015-02-26
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2016-05-04
    • 2020-01-12
    • 2019-05-12
    相关资源
    最近更新 更多