Laravel Jetstream - Навигация - Передача данных имени маршрута в: активную навигацию

В моем navigation-dropdown.blade.php(из Laravel Jetstream ) у меня есть:

              <x-jet-responsive-nav-link href="{{ route('dashboard') }}" :active="request()->routeIs('dashboard')">
            {{ __('Dashboard') }}
        </x-jet-responsive-nav-link>

        <x-jet-responsive-nav-link href="/purchases" :active="request()->routeIs('purchases.index')">
            {{ __('Purchases') }}
        </x-jet-responsive-nav-link>                       

        <x-jet-responsive-nav-link href="/debug" :active="request()->routeIs('debug')">
            {{ __('Debug') }}
        </x-jet-responsive-nav-link>            

В моем routes/web.php, У меня есть:

      Route::middleware(['auth:sanctum', 'verified'])->resource('purchases','App\Http\Controllers\PurchaseController')->name('*', 'purchases');

Route::middleware(['auth:sanctum', 'verified'])->get('/debug', [DebugController::class, 'index'])->name('debug');

Я приезжаю и :isActiveне устанавливается, но когда я приезжаю, устанавливается. Другими словами, добавление ->name('debug') к маршруту добавляет подчеркивание к «Отладка», когда вы находитесь в представлении, как и ожидалось.

Однако добавление ->name('purchases')к маршруту ресурса вызывает исключение о нехватке параметров. Вызов ->name('*', 'purchases') не генерирует исключения, но ничего не делает (этот элемент навигации не подчеркивается).

Пока на /debug вид, вы видите:

Пока на /purchases вид, вы не видите подчеркивания:

Как я могу это исправить? Я также пробовал:

              <x-jet-responsive-nav-link href="/purchases" :active="request()->routeIs('purchases')">
            {{ __('Purchases') }}
        </x-jet-responsive-nav-link>                       

1 ответ

я бы использовал имя маршрута в href="":

      <x-jet-responsive-nav-link href="{{route('purchases.index')}}" :active="request()->routeIs('purchases.index')">
    {{ __('Purchases') }}
</x-jet-responsive-nav-link>     

также я бы проверил активен с помощью подстановочного знака (*), чтобы убедиться, что он активен, пока вы находитесь на другом сайте, таком как «purchases.edit»:

      <x-jet-responsive-nav-link href="{{route('purchases.index')}}" :active="request()->routeIs('purchases.*')">
    {{ __('Purchases') }}
</x-jet-responsive-nav-link>                       

в общем, рекомендуется защищать маршруты с помощью группы промежуточного программного обеспечения, чтобы вам не приходилось добавлять промежуточное программное обеспечение к каждому маршруту:

      Route::group(['middleware' => ['auth:sanctum', 'verified']], function(){
    Route::resource('purchases', PurchaseController::class); //resources don't need manual name
    Route::get('/debug', [DebugController::class, 'index'])->name('debug');
});

* не забывай

      use 'App\Http\Controllers\PurchaseController';

в вашем файле маршрута или используйте полное имя в Route:

      Route::resource('purchases', App\Http\Controllers\PurchaseController::class); 
Другие вопросы по тегам