当菜单不用于路由时,我难以理解菜单的活动状态处理。
我来自Drupal,菜单系统也处理路由。因此,设置活动状态和活动尾随状态由路由处理(也充当菜单渲染系统)。
现在,许多PHP框架都有处理路由的Router类。这似乎是一个很好的分隔,因为菜单不应该知道POST ||。选项|| ... 要求。
但是在编写前端时,我发现自己很难对菜单进行编码。或者将所有内容存储在数据库中,然后将这些值传递给视图。我不喜欢这种方法的原因是您正在创建已经在Router中写过的内容的副本,但是现在使用Menu类。
一个例子:
Route::get('/somewhere','routename.somewhere','showStuffController');
Route::post('/somewhere','routename.somewhere','saveStuffController');
Menu::add('label.somewhere','routename.somewhere');
您在这里分离关注点,所以很好。但是Menu在很大程度上取决于Route来设置其活动状态。菜单还必须了解有关设置活动跟踪的层次结构。
因此,是的,设置活动路径和活动状态类实际上是一种视图。但是有
if ( Route::currentName() === $menuitem->getRouteName() ) { print 'active'; }
您的所有观点看来都是愚蠢的。然后添加所有那些烦人的活动提示if,这确实是个肿。我知道,在视图渲染之前处理该问题并将active-trail标志设置为true似乎很丑陋(foreach遍历所有子级,遍历所有子级,...)
我的问题是:
有没有一种模式或聪明的方法来使这种清洁剂变得更好,更好……?一个人应该如何应对主动式“问题”?
我当时想渲染子级->父级。因此,从最深层次的广告开始,然后逐步发展。但是,孩子对父母一无所知,但父母对孩子一无所知(似乎很奇怪)。