有没有办法在 laravel 中定义路由组的名称?
我试图通过这个完成的是知道当前请求属于哪个组,这样我就可以通过当前路由操作激活主菜单和子菜单:
法典:
Route::group(['prefix'=>'accounts','as'=>'account.'], function(){
Route::get('/', 'AccountController@index')->name('index');
Route::get('connect', 'AccountController@connect')->name('connect');
});
Route::group(['prefix'=>'quotes','as'=>'quote.'], function(){
Route::get('/', 'QuoteController@index')->name('index');
Route::get('connect', 'QuoteController@create')->name('create');
});
导航网页代码
<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
这应该有效:
Route::group(['prefix'=>'accounts','as'=>'account.'], function(){
Route::get('/', ['as' => 'index', 'uses' => 'AccountController@index']);
Route::get('connect', ['as' => 'connect', 'uses' = > 'AccountController@connect']);
});
在此处查看说明和官方文档(在路由组和命名路由下)。
更新
{{ $routeName = 'Request::route()->getName() }}
@if(strpos($routeName, 'account.') === 0)
// do something
@endif
罗希特·卡特里(Rohit Khatri)的替代品
function getCurrentRouteGroup() {
$routeName = Illuminate'Support'Facades'Route::current()->getName();
return explode('.',$routeName)[0];
}
您可以使用
Route::name()->group(...)
为一组路由的所有名称添加前缀
Route::name('foo.')->prefix('xyz')->group(function() {
Route::get('path', 'SomeController@method')->name('bar');
});
在这里,route('foo.bar')
解析为 url /xyz/path
查看相关的 Laravel 文档
不要忘记在前缀名称中附加点:-)
// both the format of defining the prefix are working,tested on laravel 5.6
Route::group(['prefix'=>'accounts','as'=>'account.'], function() {
Route::get('/', 'SomeController@index')->name('test');
Route::get('/new', function(){
return redirect()->route('account.test');
});
});
Route::group(['prefix' => 'admin', 'as' => 'admin.'], function () {
Route::get('/', [
'as' => 'custom',
'uses' => 'SomeController@index'
]);
Route::get('/custom', function(){
return route('admin.custom');
});
});
Laravel 9 文档说:
name 方法可用于在组中的每个路由名称前面加上给定的字符串。例如,您可能希望在所有分组路由的名称前面加上 admin。给定的字符串与指定的路由名称完全相同,因此我们将确保提供尾随 .前缀中的字符:
Route::name('admin.')->group(function () { Route::get('users', function () { // Route assigned name "admin.users"... })->name('users'); });
试试这个
Route::group(['prefix'=>'accounts','as'=>'account.'], function(){
Route::get('connect', [
'as' => 'connect', 'uses' => 'AccountController@connect'
]);
});
它应该有效-
内刀片-
{{ $yourRouteName = 'Request::route()->getName() }}
// Find the first occurrence of account in URL-
@if(strpos($routeName, 'account.') === 0)
console the message or your code
@endif
在 Laravel 9 中,您现在可以执行以下操作:
Route::controller(AccountController::class)->group(function () {
Route::get('/', 'index')->name('index');
Route::get('/connect', 'connect')->name('connect');
});