Условная маршрутизация на основе Middleware - PullRequest
0 голосов
/ 05 ноября 2018

Мне нужно позвонить другому контроллеру для того же URL-адреса в зависимости от промежуточного программного обеспечения. URL должен быть одинаковым, поэтому перенаправление в промежуточном программном обеспечении не вариант. Приведенный ниже пример кода, контроллеры для десятков маршрутов уже завершены, поэтому проверка значения сеанса здесь также не предусмотрена.

Пытался создать два разных промежуточных ПО (имеет / не имеет значение сеанса), но последняя группа маршрутов все равно перезаписывает предыдущую. Любая подсказка? Может быть, нужен другой подход?

route.php выглядит так:

Route::group(array('namespace' => 'Admin', 'prefix' => 'admin', 'middleware' => 'auth'), function () {

    // set of default routes
    Route::get('/', array('as' => 'admin', 'uses' => 'FirstController@index'))->middleware('admin');
    Route::get('/profile', array('as' => 'profile', 'uses' => 'FirstController@profile'))->middleware('admin');

    Route::group(array('middleware' => 'sessionhassomething'), function () {
        // set of the same routes like above but overwritten if middleware validates    
        Route::get('/', array('as' => 'admin', 'uses' => 'SecondController@index'))->middleware('admin');
        Route::get('/profile', array('as' => 'profile', 'uses' => 'SecondController@profile'))->middleware('admin');
    });
});

SessionHasSomething промежуточное ПО :

class sessionHasSomething {
    public function handle($request, Closure $next)
    {
        if(session()->has("something_i_need_to_be_set")) {
            return $next($request);
        }

        // return what if not set, or ...?
    }
}

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Если вы проверяете только, session()->has('something'), можно использовать замыкания маршрута , чтобы добавить условие в маршрут, которое должно быть динамическим.

Ниже приведен пример:

Route::get('/', function() {
    $controller = session()->has('something')) ? 'SecondController' : 'FirstController';
    app('app\Http\Controllers\' . $controller)->index();
});

->index() - метод внутри класса контроллера.

0 голосов
/ 05 ноября 2018

У нас почти такая же проблема, и вот что я сделал. (Я не использовал промежуточное программное обеспечение).

В моем blade.php я использовал @if, @else и @endif

<?php
   use App\Models\User;
   $check = User::all()->count();
?>
@if ($check == '0')
    // my html/php codes for admin
@else
    // my html/php codes for users
@endif

вы также можете сделать это в вашем контроллере, используйте if, else.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...