Условная маршрутизация Laravel на основе значения базы данных - PullRequest
0 голосов
/ 12 мая 2019

Я разрабатываю админ-панель с laravel. Я отдаю предпочтение конечному пользователю, чтобы выбрать, если сайт не работает (для обслуживания или аналогичной цели). Предпочтение будет сохранено как логическое значение в базе данных. На основе этого значения веб-интерфейс будет перенаправлен в пользовательское представление, если сайт не работает.

(Сайт будет размещен на общем хосте, без SSL. Использование кустарных команд не допускается.)

В настоящее время я могу получить значение «site_is_down» из базы данных во время загрузки с помощью пользовательского метода в методе register () AppServiceProvider.php.

Но я не уверен, как я могу маршрутизировать вызовы на основе этого значения в файле маршрутов. У меня есть две именованные группы маршрутов (Frontend и Backend) и стандартный Auth :: routs () в маршрутах / web.php. Только внешние интерфейсы должны быть условно маршрутизированы. Backend и Auth должны быть исключены. (Таким образом, пользователь может получить доступ к панели Backend).

Я пытаюсь добиться чего-то вроде этого:

(я знаю, что это неправильный синтаксис, я пытаюсь объяснить свое мнение)

<?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 Ответ

1 голос
/ 13 мая 2019

Создайте промежуточное программное обеспечение :

<?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 () {
    //
});
...