在 laravel 中为菜单项动态设置活动 class

Setting active class for menu items dynamically in laravel

我正在使用 bootstrap 4.

创建一个 laravel 应用程序

我在 app.blade.php 中有我的主导航菜单。我有四个主要的 blade,关于、产品、联系方式和博客。

然后我需要根据当前页面更改激活的菜单项class。由于菜单是从 app.blade.php 动态加载的,因此我必须动态地为导航菜单中的当前页面设置活动 class。

我所做的是在每个 blade 中定义了一个名为 $currentpage 的变量并将页面名称分配给它,假设它是 blog.blade.php

<?php $currentPage = 'blog';?>
@extends('layouts.app')

@section('content')

并在 app.blade.php

<li class="<?php if($currentPage =='blog'){echo 'nav-item active';}?>">
                            <a class="nav-link " href="{{ url('/blog') }}">{{ __('sentence.Blog') }}</a>
                        </li>

所以这可以正常工作..

但我想知道这样做是否正确以及满足我的要求的其他可能方法是什么

您可以使用
而不是在布局文件中定义 $currentPage 变量 request()->is()方法:

<li class="nav-item {{ request()->is('blog') ? 'active' : ''}}">
    <a class="nav-link " href="{{ url('blog') }}">{{ __('sentence.Blog') }}</a>
</li>

is() 方法本质上采用请求的当前 url 路径,并使用 Str::is() 来检查您传入的模式。

这样你只需要检查当前的 URL 是否匹配 link URL 而你不必在应用程序的其他地方定义额外的数据.

在 Laravel 中动态设置菜单项 class,检查下面的代码 PHP blade 文件以检查 多个数组段 在菜单项中设置活动 class

@php
    $segment1 = Request::segment(1);
    $pages = array('blog', 'account', 'profile', 'settings');
@endphp
<li class="@if(in_array($segment1, $pages)) active @endif">
    <a href="javascript: void(0);">
        <span>Blog</span>
    </a>
</li>