虽然我确实发现 PHP Symfony 框架在很多方面都很棒,但我发现很难为网站创建易于扩展的动态菜单。
我想知道其他 Symfony 开发人员是如何处理这个问题的。我将举一个简单的例子来说明我在问什么。
如果去 www.fool.com 你会看到他们有一个典型的菜单设置。一个类别列表,其中一个是活动的类别,以某种方式用 CSS 突出显示。
什么是在 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> 上设置“当前”类。
你给出的傻瓜网例子有点复杂,因为它有两个层次。在这种情况下,您可能希望从数据库中生成菜单树,可能利用 Propel 的嵌套集支持。