5

我是使用 Symphony2 进行 Web 开发的新手(虽然绝对不是 Web 开发的新手),而且我即将开始一个中型项目,该项目将被拆分成捆绑包,因为应用程序的每次安装可能有不同的设置的可用功能。

我想从可用的捆绑包中动态生成我的导航,例如,如果捆绑包“foo”处于活动状态,则应该出现一个菜单条目,其中包含到 foo 主控制器操作的路由。

通常,我对此的看法是在某处创建一个单例,然后我将在包的 load() 函数期间填充它,在渲染期间,我将输出单例。

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

服务可以成为一种方式吗?还是事件?或者具有依赖注入的东西,所以捆绑包在构造时获得了 NavigationConfigurationElement 的实例?

对此的任何输入或想法,或者可能是如何执行此操作的示例链接,将不胜感激。

最好的问候,延斯

4

1 回答 1

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

我目前正在为使用 DI 标签的 symfony 实现一个 solr 包。我有一个名为 IndexManager 的类,它管理来自不同捆绑包的各种 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

希望有帮助。还有更多的问题吗?不要犹豫,问。

于 2012-05-29T17:26:46.357 回答