簡體   English   中英

如何在 laravel 中定義路由組名稱

[英]How to define route group name in laravel

有沒有辦法在 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');
});

導航 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>

現在我想要的是調用 function 或其他可以給我當前路線組名的東西。

例子:

  1. 如果我在索引或創建報價頁面getCurrentRouteGroup()應該返回quote
  2. 如果我在帳戶的索引或連接頁面上, 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::group(['prefix'=>'accounts','as'=>'account.'], function(){

Route::get('connect', [
'as' => 'connect', 'uses' => 'AccountController@connect'
]);

});
// 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');
    });
}); 

它應該工作 -

內刀片 -

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

// Find the first occurrence of account in URL-

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

您可以使用Route::name()->group(...)為一組路由的所有名稱添加前綴

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

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

});

這里route('foo.bar')解析為 url /xyz/path

查看相關的Laravel 文檔

不要忘記在前綴名稱中附加點:-)

Laravel 9中,您現在可以執行以下操作:

Route::controller(AccountController::class)->group(function () {
    Route::get('/', 'index')->name('index');
    Route::get('/connect', 'connect')->name('connect');
});

laravel 9 文檔說: name 方法可用於為組中的每個路由名稱加上給定字符串的前綴。 例如,您可能希望在所有分組路由的名稱前加上 admin。 給定字符串的前綴與指定的路由名稱完全相同,因此我們將確保提供尾隨。 前綴中的字符:

Route::name('admin.')->group(function () {
    Route::get('users', function () {
        // Route assigned name "admin.users"...
    })->name('users');
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM