如何在 laravel 中定义路由组名称

2022-08-30 12:17:24

有没有办法在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>

现在我想要的是调用一个函数或一些东西,它将为我提供当前路由的组名。

例子:

  1. 如果我在索引或创建报价页面应该返回getCurrentRouteGroup()quote
  2. 如果我在帐户的索引或连接页面上,则应返回getCurrentRouteGroup()account

答案 1

这应该有效:

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

在此处查看说明和官方文档(在 Route Groups 和 Named Routes 下)。

更新

{{ $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::name()->group(...)

Route::name('foo.')->prefix('xyz')->group(function() {

    Route::get('path', 'SomeController@method')->name('bar');

});

这里解析为网址route('foo.bar')/xyz/path

查看相关的 Laravel 文档

不要忘记在前缀名称中附加点:-)


推荐