我正在创建具有许多配置参数的可重用的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。
- 配置文件应包含验证参数和捆绑包配置的结构。
- 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