Как определить имя группы маршрутов в laravel

Можно ли определить имя группы маршрутов в laravel?

То, что я пытаюсь сделать, это знать, что текущий запрос принадлежит к какой группе, поэтому я могу активировать главное меню и подменю по текущему действию маршрута:

код:

Route::group(['prefix'=>'accounts','as'=>'account.'], function(){
    Route::get('/', '[email protected]')->name('index');
    Route::get('connect', '[email protected]')->name('connect');
});

Route::group(['prefix'=>'quotes','as'=>'quote.'], function(){
    Route::get('/', '[email protected]')->name('index');
    Route::get('connect', '[email protected]')->name('create');
});

Код HTML для навигации

<ul>
    <li> // Add class 'active' when any route is open from account route group
        <a href="{{route('account.index')}}">Accounts</a>
        <ul>
            <li> // Add class 'active' when connect sub menu is clicked
                <a href="{{route('account.connect')}}">Connect Account</a>
            </li>
        </ul>
    </li>
    <li> // Add class 'active' when any route is open from quote route group
        <a href="{{route('quote.index')}}">Quotes</a>
        <ul>
            <li> // Add class 'active' when create sub menu is clicked
                <a href="{{route('quote.create')}}">Create Quote</a>
            </li>
        </ul>
    </li>
</ul>

Теперь я хочу вызвать функцию или что-то, что даст мне текущее имя группы маршрутов.

Примеры:

  • Если я нахожусь в индексе или создаю страницу кавычек getCurrentRouteGroup(), верните quote
  • Если я на странице индексирования или подключения аккаунтов getCurrentRouteGroup() должен вернуться account

Ответ 1

Это должно работать:

Route::group(['prefix'=>'accounts','as'=>'account.'], function(){
    Route::get('/', ['as' => 'index', 'uses' => '[email protected]']);
    Route::get('connect', ['as' => 'connect', 'uses' = > '[email protected]']);
});

Найдите здесь объяснение и официальную документацию (в разделе Группы маршрутов и именованные маршруты).

Обновление

{{ $routeName = \Request::route()->getName() }}

@if(strpos($routeName, 'account.') === 0)
    // do something
@endif

Альтернатива от Рохита Хатри

function getCurrentRouteGroup() {
    $routeName = Illuminate\Support\Facades\Route::current()->getName();
    return explode('.',$routeName)[0];
}

Ответ 2

Попробуйте это

Route::group(['prefix'=>'accounts','as'=>'account.'], function(){

Route::get('connect', [
'as' => 'connect', 'uses' => '[email protected]'
]);

});

Ответ 3

// both the format of defining the prefix are working,tested on laravel 5.6

Route::group(['prefix'=>'accounts','as'=>'account.'], function() {
    Route::get('/', '[email protected]')->name('test');
    Route::get('/new', function(){
            return redirect()->route('account.test');
    });
});

Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () {
    Route::get('/', [
        'as' => 'custom',
        'uses' => '[email protected]'
    ]);  

    Route::get('/custom', function(){
        return route('admin.custom');
    });
}); 

Ответ 4

Должен work-

внутри blade-

{{ $yourRouteName = \Request::route()->getName() }}

// Find the first occurrence of account in URL-

@if(strpos($routeName, 'account.') === 0)
  console the message or your code
@endif