使用Symfony 3.4,我只是尝试一个用于新捆绑包(名称:APiToolBundle
)的简单案例。
这是src/ApiToolBundle/Resources/config/config.yml
的内容:
imports:
- { resource: parameters.yml }
api_tool:
api_url: %myapi_url%
api_authorization_name: 'Bearer'
此文件由ApiToolBundleExtension加载:
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
我也已经设置了配置文件:
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('production_tool');
$rootNode
->children()
->scalarNode('api_url')->defaultValue('')->end()
->scalarNode('api_authorization_name')->defaultValue('')->end()
->end()
;
return $treeBuilder;
}
}
但是随后我只想将配置参数绑定到我的服务之一:
# src/ApiToolBundle/Resources/config/services.yml
ApiToolBundle\Service\MyApi:
bind:
$apiUrl: '%api_tool.api_url%'
我基于此文档:https://symfony.com/doc/3.4/bundles/configuration.html
但是我不确定所有事情,因为他们以其他方式谈论合并。我是否需要做其他事情来加载我自己的捆绑包配置文件?
答案 0 :(得分:1)
这确实有点棘手。捆绑软件配置不同于您在服务配置中使用的参数(即使在配置内部,您也可以定义服务,乍看起来似乎有些奇怪)。这是为什么版本4中的Symfony不鼓励在应用程序内部使用语义配置,不使用包和配置,而是直接使用参数和服务的原因之一。
您需要将配置映射到参数,或将其直接注入到您需要它们的服务中,以防您不希望它们对其他服务公开可用或不希望使用{{1 }}。您可以在可以访问ContainerBuilder的扩展程序中执行此操作。
例如,请参阅FrameworkExtension,其中具有用于更改容器的大型配置:https://github.com/symfony/symfony/blob/v3.4.30/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php#L194-L196
在您的情况下,可能看起来像这样:
getParameter