Как определить имя группы маршрутов в 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