У меня возникают проблемы с обработкой меню в активном состоянии, когда оно не используется для маршрутизации.
Я из Друпала, где система меню также обрабатывает маршрутизацию. поэтому установка активного состояния и состояния активного маршрута обрабатывается маршрутом (который также действует как система рендеринга меню).
Сейчас многие PHP-фреймворки имеют классы Router, которые обрабатывают маршрутизацию. Это кажется хорошим разделением, так как Меню не должно знать о POST || ВАРИАНТЫ || ... Запросы.
Но когда я писал интерфейс, мне было трудно кодировать меню. Или хранить все в БД и передавать эти значения в представление. Что мне не нравится в этом подходе, так это то, что вы как бы создаете копию того, что вы уже написали в своем маршрутизаторе, но теперь используете класс Menu.
Пример:
Route::get('/somewhere','routename.somewhere','showStuffController');
Route::post('/somewhere','routename.somewhere','saveStuffController');
Menu::add('label.somewhere','routename.somewhere');
Вы разделяете проблемы здесь, так что это хорошо. Но меню сильно зависит от маршрута, чтобы установить его активное состояние. Меню также должно знать об иерархии, чтобы установить active-trail.
Так что да, настройка активного следа и классов активного состояния на самом деле вещь для просмотра. Но имея
if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; }
все ваши взгляды кажутся глупыми. Затем добавьте все эти надоедливые активные-следы, если это - и это настоящий раздув. Обработка этого до того, как представление получает рендеринг, и установка флага active-trail в true, кажется мне таким уродливым, как я это знаю (цикл foreach, охватывающий все дочерние элементы, который циклически обрабатывает все дочерние элементы, ...)
Мой вопрос:
Есть ли шаблон или умный способ сделать это чище, лучше, ...? Как справиться с проблемой активного маршрута?
Я думал о рендеринге ребенка -> родитель. Так что начните с рекламы самого глубокого уровня, а затем двигайтесь вверх. Но потом ребенок знает о своем родителе, а родитель ничего не знает о своих детях (кажется странным).