Содержание статьи

В Laravel 9 управление активными пунктами меню в Blade требует точной проверки текущего маршрута или URL. Простейший способ – использовать встроенные функции request()->is() или Route::currentRouteName(), которые позволяют определить, какой пункт меню соответствует текущей странице, и добавить к нему класс active.
Для динамических меню с несколькими уровнями часто применяют условные конструкции @if или вспомогательные функции. Например, создание собственной функции menuActive() позволяет централизованно управлять добавлением класса, сравнивая текущий маршрут с набором ссылок меню. Это упрощает поддержку навигации при изменении структуры сайта.
Важно учитывать, что использование request()->is() чувствительно к шаблону URL, поэтому для страниц с параметрами рекомендуется применять именованные маршруты через Route::currentRouteName(). Такой подход исключает ошибки при переходе между страницами с похожими путями и сохраняет корректное выделение активного пункта.
В статье приведены практические примеры для разных типов меню: статические ссылки, динамические списки и вложенные подменю. Реализация через Blade позволяет минимизировать дублирование кода и делает навигацию на сайте прозрачной и легко настраиваемой для любых проектов на Laravel 9.
Laravel 9 Blade: добавить класс active в меню
Для выделения активного пункта меню в Laravel 9 Blade можно использовать условные проверки текущего маршрута или URL. Один из наиболее прямых методов – применять функцию request()->is(). Например, для ссылки на страницу «/about» проверка выглядит так: class=»{{ request()->is(‘about’) ? ‘active’ : » }}». При совпадении с текущим URL к элементу автоматически добавляется класс active.
Если меню построено на именованных маршрутах, удобнее использовать Route::currentRouteName(). Сравнивая текущий маршрут с именем ссылки, можно точно определить активный пункт: class=»{{ Route::currentRouteName() === ‘about’ ? ‘active’ : » }}». Такой подход устойчив к изменениям URL и параметрам маршрута.
Для повторяющихся проверок лучше создать вспомогательную функцию, например menuActive($route), которая возвращает ‘active’ при совпадении. Это сокращает дублирование кода и делает Blade-файлы более читаемыми: class=»{{ menuActive(‘about’) }}».
При работе с вложенными подменю важно проверять не только текущий маршрут, но и маршруты дочерних элементов. Использование массивов имен маршрутов в вспомогательной функции позволяет автоматически подсвечивать родительский пункт меню, если активен любой из его дочерних элементов.
Проверка текущего маршрута в Blade для назначения класса active

В Laravel 9 для назначения класса active важно точно определить, какой маршрут используется в текущем запросе. Blade предоставляет несколько инструментов для такой проверки.
Основные методы:
- request()->is() – проверяет соответствие текущего URL шаблону. Пример: class=»{{ request()->is(‘about’) ? ‘active’ : » }}». Подходит для статических и простых маршрутов.
- Route::currentRouteName() – возвращает имя текущего маршрута. Позволяет сравнивать с именами маршрутов, заданными в web.php: class=»{{ Route::currentRouteName() === ‘about’ ? ‘active’ : » }}». Надежно при изменении URL или добавлении параметров.
Для сложных меню с вложенными элементами можно использовать массив имен маршрутов:
- Создать массив с именами дочерних маршрутов: $submenuRoutes = [‘about’, ‘team’, ‘history’].
- Проверить текущий маршрут через in_array: class=»{{ in_array(Route::currentRouteName(), $submenuRoutes) ? ‘active’ : » }}».
- Так можно подсвечивать родительский пункт меню, если активен любой из дочерних элементов.
Использование этих проверок делает навигацию точной и исключает ошибки подсветки активных пунктов при изменении структуры маршрутов.
Использование директивы @if для выделения активного пункта меню

В Blade можно использовать директиву @if для точного управления добавлением класса active к пунктам меню. Этот метод позволяет сравнивать текущий маршрут или URL с ссылкой меню и динамически изменять атрибут class.
Пример базового использования:
| Элемент меню | Blade-код |
|---|---|
| Главная |
<li class=»@if(request()->is(‘/’)) active @endif»> <a href=»/»>Главная</a> </li> |
| О нас |
<li class=»@if(Route::currentRouteName() === ‘about’) active @endif»> <a href=»{{ route(‘about’) }}»>О нас</a> </li> |
Для вложенных меню можно комбинировать несколько условий:
| Элемент меню | Blade-код |
|---|---|
| Сервисы |
<li class=»@if(in_array(Route::currentRouteName(), [‘service1′,’service2’])) active @endif»> <a href=»#»>Сервисы</a> </li> |
Использование @if обеспечивает полную гибкость: можно включать сложные логические проверки, учитывать параметры URL и динамически подсвечивать родительские элементы меню.
Применение функции request()->is() для установки класса active
is() для установки класса active»>
Функция request()->is() проверяет соответствие текущего URL заданному шаблону и возвращает true при совпадении. Это позволяет динамически добавлять класс active к элементам меню без необходимости использования имен маршрутов.
Пример для статической страницы:
<li class=»{{ request()->is(‘about’) ? ‘active’ : » }}»><a href=»/about»>О нас</a></li>
Для меню с подстраницами удобно использовать символ подстановки ‘*’:
<li class=»{{ request()->is(‘services/*’) ? ‘active’ : » }}»><a href=»/services»>Сервисы</a></li>
Это выделит активным любой URL вида /services/подстраница, что избавляет от проверки каждого маршрута отдельно.
Для проверки нескольких URL одновременно можно передавать массив шаблонов:
<li class=»{{ request()->is([‘blog’, ‘news’]) ? ‘active’ : » }}»><a href=»/blog»>Блог</a></li>
Использование request()->is() оптимально для простых и вложенных меню, когда структура URL предсказуема, и обеспечивает корректное выделение активного пункта без лишнего кода.
Добавление класса active через route name в Blade
В Laravel 9 для точного определения активного пункта меню удобно использовать имя маршрута. Blade предоставляет функцию Route::currentRouteName(), которая возвращает имя текущего маршрута. Сравнивая его с именем маршрута ссылки, можно динамически добавлять класс active.
Пример для одиночного пункта меню:
<li class=»{{ Route::currentRouteName() === ‘about’ ? ‘active’ : » }}»><a href=»{{ route(‘about’) }}»>О нас</a></li>
Для меню с несколькими связанными маршрутами удобно использовать массив:
<li class=»{{ in_array(Route::currentRouteName(), [‘services.index’, ‘services.show’]) ? ‘active’ : » }}»>
<a href=»{{ route(‘services.index’) }}»>Сервисы</a>
</li>
Такой подход позволяет подсвечивать активным родительский пункт меню, если пользователь находится на любой из дочерних страниц.
Использование имен маршрутов обеспечивает стабильное выделение активного пункта при изменении URL, работе с параметрами маршрутов и генерации ссылок через route(), минимизируя ошибки подсветки.
Создание вспомогательной функции для автоматического добавления active
Для упрощения управления классом active в меню рекомендуется создавать вспомогательную функцию. Она позволяет централизованно проверять текущий маршрут и возвращать ‘active’ при совпадении, уменьшая дублирование кода в Blade.
Пример функции в файле app/helpers.php:
<?php
function menuActive($routes) {
if (is_array($routes)) {
return in_array(Route::currentRouteName(), $routes) ? ‘active’ : »;
}
return Route::currentRouteName() === $routes ? ‘active’ : »;
}
Использование в Blade:
<li class=»{{ menuActive(‘about’) }}»><a href=»{{ route(‘about’) }}»>О нас</a></li>
<li class=»{{ menuActive([‘services.index’,’services.show’]) }}»><a href=»{{ route(‘services.index’) }}»>Сервисы</a></li>
Такой подход упрощает поддержку меню, позволяет легко добавлять новые пункты и корректно подсвечивать родительские элементы для вложенных маршрутов.
Сравнение текущего URL с ссылкой меню без использования пакетов

Для подсветки активного пункта меню в Laravel 9 можно напрямую сравнивать текущий URL с URL ссылки, без сторонних пакетов. Функция request()->url() возвращает полный адрес текущей страницы, что позволяет проводить точное сравнение.
Пример реализации для одиночного пункта меню:
<li class=»{{ request()->url() === url(‘/about’) ? ‘active’ : » }}»><a href=»{{ url(‘/about’) }}»>О нас</a></li>
Для динамических маршрутов с параметрами удобно использовать request()->is() с шаблоном:
<li class=»{{ request()->is(‘services/*’) ? ‘active’ : » }}»><a href=»{{ url(‘/services’) }}»>Сервисы</a></li>
Такой метод позволяет контролировать активное состояние без подключения внешних пакетов и обеспечивает точное соответствие URL, включая подстраницы и вложенные маршруты.
Управление активным состоянием выпадающих подменю
Для корректного выделения активного пункта в выпадающих меню необходимо учитывать как родительский элемент, так и дочерние страницы. В Laravel Blade это достигается с помощью массивов маршрутов и проверок текущего URL или имени маршрута.
Пример алгоритма:
- Создать массив дочерних маршрутов для подменю: $submenuRoutes = [‘services.index’, ‘services.show’].
- Проверить текущий маршрут через in_array(Route::currentRouteName(), $submenuRoutes) и добавить класс active родительскому элементу.
- Для каждого дочернего элемента подменю проверить его имя маршрута или URL и выделить класс active индивидуально.
Пример Blade-кода:
-
<li class=»{{ in_array(Route::currentRouteName(), [‘services.index’,’services.show’]) ? ‘active’ : » }}»>
<a href=»#»>Сервисы</a>
<ul>
<li class=»{{ Route::currentRouteName() === ‘services.index’ ? ‘active’ : » }}»><a href=»{{ route(‘services.index’) }}»>Сервис 1</a></li>
<li class=»{{ Route::currentRouteName() === ‘services.show’ ? ‘active’ : » }}»><a href=»{{ route(‘services.show’) }}»>Сервис 2</a></li>
</ul>
</li>
Использование такого подхода обеспечивает корректное отображение активного состояния родительских и дочерних пунктов, особенно на сайтах с многоуровневыми меню.
Вопрос-ответ:
Как в Laravel 9 Blade автоматически выделять активный пункт меню?
Для выделения активного пункта меню можно использовать функции request()->is() или Route::currentRouteName(). Первый вариант сравнивает текущий URL с заданным шаблоном, второй — проверяет имя маршрута. В Blade это реализуется через условие: class=»{{ request()->is(‘about’) ? ‘active’ : » }}» или class=»{{ Route::currentRouteName() === ‘about’ ? ‘active’ : » }}».
Можно ли подсвечивать родительский пункт меню, если активна его подстраница?
Да, для этого создается массив дочерних маршрутов и проверяется текущий маршрут через in_array(Route::currentRouteName(), $submenuRoutes). Если совпадение найдено, родительский пункт получает класс active, а дочерний элемент подсвечивается индивидуально.
Как использовать request()->is() для динамических URL с параметрами?
Функция request()->is() поддерживает символ подстановки ‘*’. Например, request()->is(‘services/*’) вернет true для любого URL вида /services/что-то, позволяя автоматически подсвечивать активный пункт меню без ручной проверки каждого параметра.
Зачем создавать вспомогательную функцию для класса active в Blade?
Вспомогательная функция позволяет централизованно управлять добавлением класса active. Она принимает имя маршрута или массив маршрутов и возвращает ‘active’, если текущий маршрут совпадает. Это сокращает дублирование кода в Blade и упрощает поддержку меню при расширении сайта.
Можно ли сравнивать текущий URL с ссылкой меню без пакетов?
Да, это делается через request()->url() и функцию url(). Пример: class=»{{ request()->url() === url(‘/about’) ? ‘active’ : » }}». Такой способ точный и не требует сторонних пакетов, подходит для страниц с предсказуемой структурой URL.
Как правильно выделять активный пункт меню в Laravel 9 Blade для сложного сайта с вложенными страницами?
Для сайтов с вложенной структурой меню удобнее использовать проверку имени маршрута через Route::currentRouteName() и массив дочерних маршрутов. Родительский пункт получает класс active, если текущий маршрут совпадает с любым из дочерних. Дочерние элементы проверяются отдельно, что позволяет подсвечивать активный путь точно, даже если URL содержит параметры. Такой подход уменьшает дублирование кода и упрощает поддержку навигации при добавлении новых страниц.
