Symfony 2 - 从可用的包中生成菜单条目

jho*_*ter 5 navigation menu symfony

我是Symphony2的Web开发新手(尽管对于Web开发来说绝对不是新手),而我正准备开始一个中等大小的项目,它将被捆绑在一起,因为每个应用程序的安装可能都有不同的设置可用的功能.

我想从可用的包中动态生成导航,例如,如果包"foo"处于活动状态,则应显示带有指向foo主控制器操作路径的菜单项.

通常,我对此的看法是在某个地方创建一个单例,然后我会在bundle的load()函数中填充,在渲染过程中,我会输出单例.

但是symfony2在这个部分提供了很大的灵活性,所以我目前正在评估是否有更好的方法.

服务可以成为一种方式吗?还是活动?或者依赖注入的东西,所以bundle在构造时获得NavigationConfigurationElement的实例?

任何关于此的输入或想法,或者可能是一些如何做到这一点的示例的链接,将不胜感激.

此致,Jens

roo*_*m13 6

我最好的方法就是使用依赖注入标签.您将不得不创建一个依赖注入扩展并提供一个"标记",各种包可以使用它来注册它们的菜单条目.

我不会在这里描述你的整个过程,因为互联网上有大量的资源.

但是要简要介绍一下该怎么做

  1. 实现一个包含菜单条目的服务(你在哪里谈论的单身)
  2. 通过实现编译器传递来处理标记,此编译器传递将查找使用导航类标记的所有服务并使用菜单服务注册它们
  3. 创建一个twig函数,该函数将使用该服务来检索菜单并对其进行渲染
  4. 编写使用标记并提供菜单项的包

这里有一些可能对您有帮助的资源:

http://symfony.com/doc/current/components/dependency_injection/tags.html http://miguel.ibero.me/es/post/2012-04-28/adding-tags-to-symfony.html

我目前正在为symfony实现一个使用DI标签的solr包.我有一个名为IndexManager的类,它管理来自不同bundle的各种solr索引.我使用DI标签,以便其他捆绑包可以注册他们想要在solr中编入索引的内容/实体.原理与菜单项相同.

请看这里:https://github.com/roomthirteen/Room13SolrBundle

重要的文件是:

添加编译器传递:https://github.com/roomthirteen/Room13SolrBundle/blob/master/Room13SolrBundle.php 编译器自行传递:https://github.com/roomthirteen/Room13SolrBundle/blob/master/DependencyInjection/Compiler/SolrCompilerPass .PHP

希望有所帮助.任何更多的任务?不要犹豫,问.

  • 这真的像一个魅力,即使它需要一点摆弄在哪里放一切,以及我需要什么类.我会发布一个代码示例,但这是客户端代码,而不是OSS,所以我不能这样做.我也不能投票,因为我的声誉不够高.但非常感谢你的帮助,我真的很感激! (2认同)