Estou tendo problemas para resolver o manuseio do estado ativo de um menu quando o menu não é usado para roteamento.
Eu venho do Drupal, onde o sistema de menus também lida com o roteamento. portanto, definir o estado ativo e o estado da trilha ativa é tratado pela rota (que também atua como um sistema de renderização de menu).
Agora, muitas estruturas PHP têm classes de roteador que lidam com o roteamento. Parece uma boa separação, pois um menu não deve estar ciente do POST || OPÇÕES || ... solicitações de.
Mas, ao escrever o frontend, encontrei-me codificando o menu. Ou armazenando tudo no banco de dados e passando esses valores para uma exibição. O que eu não gosto dessa abordagem é que você está criando uma cópia do que já escreveu no seu roteador, mas agora usando a classe Menu.
Um exemplo:
Route::get('/somewhere','routename.somewhere','showStuffController');
Route::post('/somewhere','routename.somewhere','saveStuffController');
Menu::add('label.somewhere','routename.somewhere');
Você está separando preocupações aqui, então isso é legal. Mas o Menu depende muito da Rota para definir seu estado ativo. O menu também precisará saber sobre hierarquia para definir a trilha ativa.
Então, sim, definir trilhas ativas e classes de status ativas é realmente uma coisa de visualização. Mas ter
if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; }
em todos os seus pontos de vista parece estúpido. Em seguida, adicione todos os ifs irritantes da trilha ativa e isso é um verdadeiro inchaço. Lidar com isso antes que a exibição seja processada e definir um sinalizador de trilha ativa como verdadeiro parece tão feio do jeito que eu sei (um foreach repetindo todas as crianças que repetem todas as crianças, ...)
Minha pergunta é:
Existe um padrão ou uma maneira inteligente de obter este limpador, melhor, ...? Como lidar com o 'problema' da trilha ativa?
Eu estava pensando em renderizar filho -> pai. Então comece com o anúncio no nível mais profundo e depois suba. Mas então a criança sabe sobre seus pais, mas os pais não sabem nada sobre seus filhos (parece estranho).
fonte