Gibt es eine Möglichkeit, den Namen der Routengruppe in Laravel zu definieren?
Was ich damit erreichen möchte, ist zu wissen, dass die aktuelle Anforderung zu welcher Gruppe gehört, sodass ich das Hauptmenü und das Untermenü durch die aktuelle Routenaktion aktivieren kann:
Code:
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-Code für die Navigation
<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>
Nun möchte ich eine Funktion oder etwas aufrufen, das mir den Gruppennamen der aktuellen Route gibt.
Beispiele:
getCurrentRouteGroup()
quote
zurückgeben.getCurrentRouteGroup()
account
zurückgegeben werden.Das sollte funktionieren:
Route::group(['prefix'=>'accounts','as'=>'account.'], function(){
Route::get('/', ['as' => 'index', 'uses' => '[email protected]']);
Route::get('connect', ['as' => 'connect', 'uses' = > '[email protected]']);
});
Siehe hier für eine Erklärung und in der offiziellen Dokumentation (unter Routengruppen und benannte Routen).
Update
{{ $routeName = \Request::route()->getName() }}
@if(strpos($routeName, 'account.') === 0)
// do something
@endif
Alternative von Rohit Khatri
function getCurrentRouteGroup() {
$routeName = Illuminate\Support\Facades\Route::current()->getName();
return explode('.',$routeName)[0];
}
Es sollte funktionieren-
innen klingen-
{{ $yourRouteName = \Request::route()->getName() }}
// Find the first occurrence of account in URL-
@if(strpos($routeName, 'account.') === 0)
console the message or your code
@endif
// 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');
});
});
Versuche dies
Route::group(['prefix'=>'accounts','as'=>'account.'], function(){
Route::get('connect', [
'as' => 'connect', 'uses' => '[email protected]'
]);
});