Symfony:如何将可重用bundle的config参数传递给framework / twig?

时间:2017-05-09 09:47:47

标签: php symfony symfony-2.8

我正在创建具有许多配置参数的可重用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中创建这部分代码(将bundle参数从全局"参数:")移动到它自己的命名空间:

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)在不编辑配置文件的情况下动态地将这些参数分配给框架或树枝。例如,如果可能的话,可能在DependencyInjection / Configuration.php中。

如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

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

您需要使用DependencyInjection / Configuration和AcmeCoreExtension。

  1. 配置文件应包含验证参数和捆绑包配置的结构。
  2. AcmeCoreExtension应该将您的配置与树枝合并。
  3. 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