Symfony:如何将可重用bundle的配置参数传递给框架/树枝



我正在创建具有许多配置参数的可重用的Symfony捆绑包,我也需要在框架和twig捆绑包中使用这些参数。

以下是我的配置当前外观的工作示例(app/config/config.yml(:

# my bundle parameters
parameters:
  locales_active:
    - en_US
    - de_DE
  locale_default: en_US
  locale_fallback: de_DE
  google_maps_api_key: some_value
  google_translate_api_key: some_value
# framework parameters
framework:
  translator:      { fallbacks: ['%locale_fallback%']
  default_locale:  "%locale_default%"
# twig parameters
twig:
  globals:
    locales_active: '%locales_active%'
    google_maps_api_key: '%google_maps_api_key%'
    google_translate_api_key: '%google_translate_api_key%'

这种方法有效,但我想尽可能简单地安装这个捆绑包(这里只是一小部分参数,实际上还有更多(。

我想做的是:

1( 仅在 config.yml 中创建这部分代码(将捆绑包参数从全局"参数:"移动到它自己的命名空间(:

acme_core:
  locales_active:
    - en_US
    - de_DE
  locale_default: en_US
  locale_fallback: de_DE
  google_maps_api_key: some_value
  google_translate_api_key: some_value

2( 将这些参数动态分配给框架或 twig,而无需编辑配置文件。例如,如果可能的话.php也许在 DependencyInjection/Configuration 中。

如何实现这一点?

这很容易实现。只是玩弄它。

您需要使用 DependencyInjection/Configuration 和 AcmeCoreExtension。

  1. 配置文件应包含验证参数和捆绑包配置的结构。
  2. AcmeCoreExtension 应该将您的配置与 twig 合并。
public function load(array $configs, ContainerBuilder $container)
{
    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);
    // merge your configs here (or something similar)
    // $config['twig']['globals']['locales_active'] = 
}

http://symfony.com/doc/current/bundles/configuration.html

最新更新