Розумне виявлення маршрутів у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 13 лютого, 2025
Ви коли-небудь замислювалися, як зробити навігацію у вашій Laravel-аплікації динамічною та інтуїтивно зрозумілою? У нашій статті ми розглянемо, як використовувати метод "named" для спрощення логіки маршрутів, а також створення адаптивних компонентів у вашому коді. Читайте далі, щоб дізнатися, як зробити ваш додаток ще більш ефективним і зручним

Метод з назвою в Laravel забезпечує простий спосіб визначити, чи відповідає поточний запит певній назві маршруту. Ця потужна можливість дозволяє виконувати умовну логіку на основі активного маршруту, що є чудовим для аналітики, підсвічування навігації чи перевірки прав доступу.

Особливо цінним цей підхід стає при створенні компонентів, які повинні функціонувати по-різному в залежності від активного маршруту, без необхідності повторювати умовні перевірки в усьому додатку.

if ($request->route()->named('dashboard')) {
    // Ми на панелі керування
}

Ось практичний приклад реалізації динамічних станів навігації:

<?php
 
namespace App\View\Components;
 
use Illuminate\View\Component;
use Illuminate\Http\Request;
 
class NavigationMenu extends Component
{
    public function __construct(private Request $request)
    {
    }
 
    public function isActive(string $routeName): bool
    {
        return $this->request->route()->named($routeName);
    }
 
    public function isActiveSection(string $section): bool
    {
        return $this->request->route()->named("$section.*");
    }
 
    public function render()
    {
        return view('components.navigation-menu', [
            'sections' => [
                'dashboard' => [
                    'label' => 'Панель приладів',
                    'route' => 'dashboard',
                    'active' => $this->isActive('dashboard')
                ],
                'posts' => [
                    'label' => 'Блог',
                    'route' => 'posts.index',
                    'active' => $this->isActiveSection('posts')
                ],
                'settings' => [
                    'label' => 'Налаштування',
                    'route' => 'settings.index',
                    'active' => $this->isActiveSection('settings')
                ]
            ]
        ]);
    }
}

Коли ви використовуєте цей компонент у своєму додатку, навігаційне меню автоматично визначає активний маршрут і оновлюється відповідно:

<!-- navigation-menu.blade.php -->
<nav>
    @foreach($sections as $key => $section)
        <a href="{{ route($section['route']) }}"
           @class(['nav-link', 'active' => $section['active']])>
            {{ $section['label'] }}
        </a>
    @endforeach
</nav>

Метод з назвою спрощує логіку на основі маршрутів, роблячи ваш код більш підтримуваним та зменшуючи складність функцій, залежних від маршрутів