如何将我的一个捆绑配置参数注入服务?
当我有这样的服务时:
<!-- My Object FormType -->
<service id="form.type.my_object" class="My\Bundle\Form\Type\MyObjectType">
<tag name="form.type" alias="my_object"/>
<argument type="service" id="doctrine.orm.entity_manager"/>
<argument type="service" id="service_container"/>
<argument type="string">%my_bundle.some_parameter%</argument>
</service>
我已将参数放在config.yml中:
my_bundle:
some_parameter: My\Bundle\Entity\SomeEntityClass
我收到此错误:
The service "form.type.my_object" has a dependency on a non-existent parameter "my_bundle.some_parameter".
如何解决这个问题(没有在全局应用程序参数中列出bundle参数)?
修改
我正在寻找一种不使用parameters.yml的方法。
更新
这是我的配置加载方式:
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$container->setParameter('my_bundle.config', $config);
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$serviceFiles = array('form', 'services');
foreach ($serviceFiles as $basename) {
$loader->load(sprintf('%s.xml', $basename));
}
}
答案 0 :(得分:0)
在&#34; parameters.yml&#34;
中定义参数parameters:
my_bundle:
some_parameter: My\Bundle\Entity\SomeEntityClass
并使用以下命令在您的服务中访问它:%my_bundle.some_parameter%
答案 1 :(得分:0)
您的捆绑包参数文件可能未被捆绑包加载。
例如,如果您在parameters.yml
文件夹的MyBundle/Resources/Config
中定义了参数,则套装扩展程序类MyBundle/DependencyInjection/MyBundleExtension
应包含:
public function load(array $configs, ContainerBuilder $container)
{
configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new YamlFileLoader(
$container,
new FileLocator(__DIR__.'/../Resources/config')
);
$loader->load('parameters.yml');
}
修改强>
另一种解决方案。只需在您的全局config.yml文件中添加一行
即可imports:
- { resource: parameters.yml }
- { resource: @MyBundle/Resources/config/parameters.yml }
- { resource: security.yml }
答案 2 :(得分:0)
我找到了解决方案。事实证明,你可以通过以下方式轻松完成:
// My\VendorBundle\DependencyInjection\MyBundleExtension.php
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$container->setParameter('my_bundle.config', $config);
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$this->setBundleParameters($container,$config);
$serviceFiles = array('form', 'services');
foreach ($serviceFiles as $basename) {
$loader->load(sprintf('%s.xml', $basename));
}
}
/**
* @param ContainerBuilder $container
* @param $config
* @return $this
*/
private function setBundleParameters(ContainerBuilder $container, $config)
{
$container->setParameter('my_bundle.some_parameter', $config['some_parameter']);
return $this;
}
现在我正在看它,也许我也可以用它作为一个论点:
<!-- My Object FormType -->
<service id="form.type.my_object" class="My\Bundle\Form\Type\MyObjectType">
...
<argument type="string">%my_bundle.config.some_parameter%</argument>
</service>