我是使用Symphony2进行Web开发的新手(尽管对于Web开发来说绝对不是新手),而且我即将开始一个中型项目,它将被捆绑在一起,每次安装都是该应用可能具有不同的可用功能设置。
我想从可用的捆绑包中动态生成导航,例如如果捆绑" foo"处于活动状态时,应显示带有指向foo主控制器操作路径的菜单项。
通常,我对此的看法是在某个地方创建一个单例,然后我会在bundle的load()函数中填充它,在渲染过程中,我会输出单例。
但是symfony2在这一部分提供了很大的灵活性,所以我目前正在评估是否有更好的方法。
服务可以成为一种方式吗?还是活动?或者是依赖注入的东西,所以bundle在构造时获得了NavigationConfigurationElement的实例?
对此有任何意见或想法,或者可能是一些如何做到这一点的示例链接,我们将不胜感激。
祝你好运, 延
答案 0 :(得分:6)
我最好的方法就是使用依赖注入标签。您将不得不创建一个依赖注入扩展并提供一个“标记”,各种包可以使用它来注册它们的菜单条目。
我不会在这里向你描述整个过程,因为互联网上有足够的资源。
但要简要介绍一下该怎么做
以下是一些可能对您有所帮助的资源:
http://symfony.com/doc/current/components/dependency_injection/tags.html http://miguel.ibero.me/es/post/2012-04-28/adding-tags-to-symfony.html
我目前正在为使用DI标签的symfony实现一个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
希望有所帮助。任何更多的任务?不要犹豫。