虽然我确实发现 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> 上设置“当前”类。

您给出的fool.com 示例有点复杂,因为它是两个级别。在这种情况下,您可能希望从数据库生成菜单树,也许利用 Propel 的嵌套集支持。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top