проверка текущего URL-адреса в пунктах подменю

#laravel #laravel-blade

#laravel #laravel-blade

Вопрос:

Я хочу добавить пользовательский активный класс в боковое меню с текущим маршрутом. Я знаю, что могу получить текущий URL url()->current() -адрес и сравнить его с route('something') ним, но моя проблема заключается в том, что я хочу получить активный класс как в родительском, так и в дочернем пункте меню, когда выбран дочерний элемент.

Мой код для элемента меню без дочерних элементов:

 <li class=" @if(url()->current()==route('home')) custom_active_menu @endif ">
  

Ответ №1:

вы можете использовать if с несколькими операторами or для родительского элемента. я использую Request класс в целом, чтобы я мог использовать шаблон только со звездочкой вместо множественного оператора or . однако вы можете использовать все, что пожелаете. пример с использованием Request класса

 <li class="{{ Request::is('menu/*') || Request::is('menu') ? 'active' : ''  }}">
    <a href="#">
        <i class="metismenu-icon pe-7s-bandaid"></i>
        Menu
        <i class="metismenu-state-icon pe-7s-angle-down caret-left"></i>
    </a>
    <ul>
        <li>
            <a href="{{ route('menu.index') }}" class="{{ Request::is('menu') ? 'active' : ''  }}">
                <i class="metismenu-icon"></i>
                Menu Index
            </a>
        </li>
                        
        <li>
            <a href="{{ route('menu.create') }}" class="{{ Request::is('menu/create') ? 'active' : ''  }}">
                <i class="metismenu-icon"></i>
                Menu Create
            </a>
        </li>
    </ul>
</li>
  

здесь я проверяю шаблон в URL-адресе запроса, используя Request::is('menu/*') , что означает, что он li всегда будет активен, если URL-адрес запроса соответствует любому шаблону, начинающемуся с menu/ like menu/create или menu/1/edit . с помощью оператора or я проверяю точный URL-адрес запроса menu .

с дочерним элементом это просто простой оператор if. если текущий URL-адрес совпадает с URL-адресом меню, добавьте класс active.

в вашем примере я бы сделал что-то вроде для parent

 <li class=" @if (url()->current() == route('home') || url()->current() == route('another_route')) custom_active_menu @endif ">
  

и для дочернего элемента только один if

 <li class=" @if (url()->current() == route('home')) custom_active_menu @endif ">