【问题标题】:Symfony: Dynamic configuration file loadingSymfony:动态配置文件加载
【发布时间】:2015-09-15 12:49:27
【问题描述】:

这里是上下文:

  • 我的应用程序的每个用户都属于一家公司。
  • 每个公司的参数都在“company.yml”配置文件中定义,它们都共享完全相同的结构。
  • 这些参数随后用于调整应用程序行为。

这听起来可能微不足道,但我正在寻找的是加载这些特定 YAML 文件的正确方法。


据我目前了解,使用 Extension 类是不可能的,因为它不了解当前用户。

使用自定义服务来管理这些配置而不是依赖 Symfony 的参数似乎更合适,但我找不到如何实现验证(使用 Configuration 类)和缓存。

任何帮助将不胜感激,感谢您的投入!

【问题讨论】:

    标签: symfony configuration


    【解决方案1】:

    使用 Symfony2 的 Yaml、处理器和配置组件应该可以满足您的需求。

    像在 DependencyInjection 案例中一样定义“CompanyConfiguration”类 创建一个新的“CompanyLoader”服务

    use Symfony\Component\Yaml\Yaml;
    use Symfony\Component\Config\Definition\Processor;
    
    $companies = Yaml::parse('company.yml');
    $processor = new Processor();
    $configuration = new CompanyConfiguration();
    $processor->processConfiguration($configuration, $companies);
    

    现在你应该可以使用你的公司数组来做你想做的事了

    【讨论】:

    • 这个处理器实例可能是我一直在寻找的,我一定会试试的,谢谢! :)
    • 我刚刚完成了这个解决方案的实施,它就像一个魅力。再次感谢!
    【解决方案2】:

    看看http://symfony.com/doc/current/cookbook/configuration/configuration_organization.htmlhttp://symfony.com/doc/current/cookbook/configuration/environments.html。如果这不是正确答案,您必须更具体地说明您的 company.yml 配置包含的内容。

    【讨论】:

    • Symfony 关于该主题的大部分(如果不是全部)文档(包括这些链接)都是关于 global 应用程序配置的,而我需要处理请求级别的工作。举个例子: - 公司 A 需要访问统计页面。 - B 公司也想要它,但需要更多信息。 - C公司根本不需要它。使用每个公司的配置文件,我可以管理这些差异而无需硬编码任何东西。我不能依赖全局和静态配置,需要根据当前用户的公司加载相应的文件。
    • 所以您不是每家公司都有一个 yml,而是很多?因为如果每家公司只有一个,我会谈论一个“全局”配置——你可以每家公司有一个 prod-env,然后只加载你需要的 yml——再次使用提供的链接。
    • 知道了。这是一种不同且有趣的方法,我必须在业余时间尝试:) 由于服务容器在 AppKernel 中似乎可用,我应该能够访问当前用户,然后加载相应的 conf 文件。感谢您的意见!
    猜你喜欢
    • 1970-01-01
    • 2017-12-02
    • 2019-11-13
    • 2014-05-03
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多