【问题标题】:Using KnpMenuBundle in Symfony2 for menu of Entities?在 Symfony2 中使用 KnpMenuBundle 作为实体菜单?
【发布时间】:2012-02-14 22:07:33
【问题描述】:

我有一个User 实体,所有用户都有许多Category 实体。我有一个控制器,它接受 Category slug 作为参数。

我想呈现一个菜单,其中列出了User 的所有Category 作为指向该控制器的链接。如果他们已经在该页面上,我还想将其标记为“当前”。

KnpMenuBundle 看起来很适合这个 https://github.com/KnpLabs/KnpMenuBundle/blob/master/Resources/doc/index.md

但它的所有示例都使用构建的静态菜单,而不是从动态项目构建菜单。 我想过在Builder 中获取项目,但我已经在最终呈现树枝模板的控制器中拥有它们,所以我宁愿以某种方式将这些Category 传递给Builder 并让它处理渲染菜单。

最好的方法是什么?

我的另一个想法是自己在 twig 中做菜单,但我需要额外的逻辑来确定哪个页面是“当前”

【问题讨论】:

  • Knp 是相当静态的,它可以扩展,但无论如何不会那么灵活。在我看来,Knp 只不过是一些 setter / getter。我的问题很常见:​​stackoverflow.com/questions/9316709/… 但是,不存在任何实现。如果您发现任何有用的信息,请告诉我。
  • Matt 你找到解决方案了吗?
  • 不,只是不使用这个包

标签: symfony


【解决方案1】:

我知道这可能不再对您有用,但对于查看该问题的其他人来说,这可能会有所帮助。
从最近开始,可以将您自己的变量从 twig 发送到构建器。

按照Documentation 中的说明这样做:

{% set menuItem = knp_menu_get('AcmeDemoBundle:Builder:mainMenu', [], {
        'some_option': 'my_value'
    }) 
%}

{{ knp_menu_render(menuItem) }}

【讨论】:

  • 我假设 'some-option' 可以替换为“id”、“class”或为主
      元素设置的任何内容。但这对我不起作用。我错过了什么吗?我应该将类/id 包装在“属性”数组中吗?谢谢。
  • 您确实可以将some_option 更改为“id”或“class”。然后在菜单生成器中,您可以从$options 参数中获取它们:`public function mainMenu(FactoryInterface $factory, array $options), so $options['id']` 或$options['class']。从那里你可以对他们做你想做的事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-11
  • 1970-01-01
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多