虽然我认为PHP Symfony框架在很多方面都非常好,但我发现为网站创建易于扩展的动态菜单有些困难。我想知道其他Symfony开发者是如何解决这个问题的。以下是我提出问题的一个简单示例。如果您访问www.fool.com,您会看到它们有一个典型的菜单设置,其中包含一系列类别,其中一个类别被高亮显示以突出显示。对于在Symfony项目中动态生成该菜单而言,有什么好的方法?是否从模块传递某些变量?我还没有找到一个优雅的解决方案。
通常,我只是手动构建一个数组,其中包含我想在菜单中显示的模块/操作组合。从动态来源(如配置文件或数据库)获取此信息将非常容易:
$this->menu = array(
'Home' => array('default', 'index'),
'About Us' => array('default', 'aboutUs'),
'Products' => array('products', 'index')
);
然后,我使用控制器的getActionName和getMethodName方法来确定我的菜单中当前选定的项目:
$this->current = array_search(array($this->getModuleName(), $this->getActionName()), $this->menu);
然后我可以在模板中迭代$ menu,以建立菜单。 我可以将项目与$current进行比较,以确定是否应在菜单项的<li>上设置“当前”类。
你提供的fool.com示例有点更加复杂,因为它是两层的。在这种情况下,您可能希望从数据库生成菜单树,可能利用Propel的嵌套集支持。