【问题标题】:Laravel Jetstream - Navigation - Passing route name data to :active navigationLaravel Jetstream - 导航 - 将路线名称数据传递给:活动导航
【发布时间】:2021-05-20 23:16:11
【问题描述】:

在我的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');

我访问/purchases:isActive 没有设置,但是当我访问/debug 时,它设置了。换句话说,当您按预期在/debug 视图上时,将-&gt;name('debug') 附加到路由会为“调试”添加下划线。

但是,将-&gt;name('purchases') 附加到资源路由会导致参数不足的异常。调用-&gt;name('*', 'purchases') 不会引发异常但什么也不做(该导航项上没有下划线)。

/debug 视图中,您会看到:

/purchases 视图中,您看不到下划线:

我该如何解决这个问题?我也试过:

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

【问题讨论】:

    标签: php laravel laravel-livewire jetstream


    【解决方案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::resource('purchases', App\Http\Controllers\PurchaseController::class); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-19
      • 2021-06-18
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 2018-08-10
      相关资源
      最近更新 更多