我目前正在处理一个捆绑项目,我需要能够在各种项目中使用它。
我的问题是:配置从未加载到我的服务中。
我的配置看起来像这样,位于config.yml文件的某个位置:
my_bundle:
my_config:
key1: value1
key2: value2
key3: value3
在扩展名文件中,我将其加载到服务中:
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');
$myService = $container->getDefinition(\MyBundle\Service\MyService::class);
$myService->setArgument('$myConfig', $config['my_config']);
}
我已经尝试过通过将一个空数组设置为默认值并使用“ replaceArgument”方法来代替,但没有更好的方法。
已编译的容器文件如下所示:
<?php
// Filename : getMyServiceService.php
use Symfony\Component\DependencyInjection\Argument\RewindableGenerator;
return $this->services['MyBundle\Service\MyService'] = new \MyBundle\Service\MyService(
${($_ = isset($this->services['doctrine.orm.default_entity_manager']) ? $this->services['doctrine.orm.default_entity_manager'] : $this->load('getDoctrine_Orm_DefaultEntityManagerService.php')) && false ?: '_'},
$this
);
当我的捆绑包的services.yml加载到配置文件中时,它看起来像:
services:
_defaults:
public: false
MyBundle\Service\MyService:
autowire: false
autoconfigure: false
arguments:
$em: '@doctrine.orm.default_entity_manager'
$container: '@service_container'
通过添加$ myConfig参数,并在扩展文件中使用“ replaceArgument”,可以加载服务,但永远不会加载预期的配置值。
我不知道3.x中加载配置的方式是否发生了变化,但是我什么也没发现,表明我做错了方法。
感谢您的回答。