虽然我发现PHP Symfony框架对很多东西都很好,但我发现很难为网站创建易于扩展的动态菜单。
我想知道其他Symfony开发人员是如何处理这个问题的。 我将举一个简单的例子来说明我的要求。
如果访问www.fool.com,您会看到他们有一个典型的菜单设置。一个类别列表,其中一个是活动的类别,以某种方式用CSS突出显示。
在Symfony项目中动态创建它的好方法是什么。从模块到模块传递某种变量。我还没有找到一个优雅的解决方案。
答案 0 :(得分:4)
通常,我只是手动构建一个模块/动作组合数组,我想在菜单中显示。从动态源(如配置文件或数据库)中获取此信息相当容易:
$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);
然后我可以在模板中迭代$菜单来构建菜单。我可以将项目与$ current进行比较,以确定是否应在菜单项的< li>上设置“当前”类。
你给出的fool.com示例有点复杂,因为它是两级的。在这种情况下,您可能希望从数据库生成菜单树,也许可以使用Propel的嵌套集支持。