1

我正在 Symfony2 中开发我的第一个包,这些服务在其构造中使用了一些参数,并且如果我在AcmeBundle/Resource/config/parameters.yml中保留此结构,则可以正常工作:

parameters:
    id: IDVAL
    secret: SECRETVAL

services:
    my_service:
        class: MyClass
        arguments: [%id%, %secret%]

但我想知道是否有任何方法可以使用parameters.yml 文件的交互式管理,通过使用 composer AcmeBundle/Resource/config/parameters.yml.dist 来安装包而不是 app/config /parameters.yml.dist

提前问候和感谢。

4

1 回答 1

1

当您创建可重用的捆绑包时,我不知道通过作曲家做到这一点的方法。相反,您可以使用 symfony 的配置组件
基于文件配置您的包,并使这些参数成为必需,这样当您安装包时,用户必须提供这些参数。对于您的用例,它将类似于: config.yml

// in YourBundle\DependencyInjection\Configuration
public function getConfigTreeBuilder(){
  $treeBuilder = new TreeBuilder();
  $rootNode = $treeBuilder->root('your_bundle_alias');
  $rootNode
    ->children()
      ->scalarNode('param1')->isRequired()->end()
      ->scalarNode('param1')->isRequired()->end()
    ->end();
 }

// in YourBundle\DependencyInjection\YourExtension
public function load(array $configs, ContainerBuilder $container){

  $configuration = new Configuration();
  $config = $this->processConfiguration($configuration, $configs);
  // ...
  // get the parameters entered in the config file, and configured above
  $param1 = $config['param1'];
  $param2 = $config['param2'];
  // inject them into my_service
  $container->getDefinition('my_service')
    ->setArguments(array($param1, $param2));
// ...
}

以这种方式编写您的捆绑配置将强制用户在config.yml文件中为您的捆绑提供一个条目,如下所示:

your_bundle_alias:
  param1: the_users_value
  param2: another_value
于 2015-08-07T13:40:17.867 回答