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);