Laravel基于数据库值的条件路由

时间:2019-05-12 20:53:01

标签: laravel routing conditional

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

(站点将托管在共享主机上,而不是SSL。不能使用artisan命令。)

目前,我可以在启动时通过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
}

1 个答案:

答案 0 :(得分: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') === true /*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 () {
    //
});