【问题标题】:Symfony 2 - Generate menu entries from available bundlesSymfony 2 - 从可用的包中生成菜单条目
【发布时间】:2012-06-03 18:47:53
【问题描述】:

我是使用 Symphony2 进行 Web 开发的新手(尽管对 Web 开发绝对不是新手),我即将开始一个中等规模的项目,该项目将被分成多个捆绑包,因为应用程序的每次安装可能都有可用功能的不同设置。

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

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

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

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

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

最好的问候, 延斯

【问题讨论】:

    标签: menu symfony navigation


    【解决方案1】:

    最好的方法是使用依赖注入标签。您将必须创建一个依赖注入扩展并提供一个“标签”,各种捆绑软件可以使用它来注册它们的菜单条目。

    我不会在这里向您描述整个过程,因为互联网上有很多关于这方面的资源。

    但是为了给你一个快速的大纲

    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 的类,它管理来自不同捆绑包的各种 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

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

    【讨论】:

    • 这听起来很有趣,而且可能是最 symfony 的做法。我会检查一下并尝试一下,如果它像我想的那样工作,会回复你。非常感谢您的意见!
    • 一旦我评估了它,我会:)
    • 这确实像一个魅力,即使它需要在哪里放置所有东西,以及我需要什么类。我会发布一个代码示例,但这是客户端代码,而不是 OSS,所以我不能这样做。而且我也不能投票,因为我的声誉不够高。但是非常感谢您的帮助,这真的很感激!
    猜你喜欢
    • 1970-01-01
    • 2020-04-02
    • 2015-06-02
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多