Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony SF 3.4在服务中注入捆绑包配置_Symfony_Symfony 3.4 - Fatal编程技术网

Symfony SF 3.4在服务中注入捆绑包配置

Symfony SF 3.4在服务中注入捆绑包配置,symfony,symfony-3.4,Symfony,Symfony 3.4,使用symfony3.4,我只是尝试了一个简单的新包名称:APiToolBundle 以下是src/ApiToolBundle/Resources/config/config.yml的内容: 此文件由ApiToolBundleExtension加载: public function load(array $configs, ContainerBuilder $container) { $configuration = new Configuration(); $config =

使用symfony3.4,我只是尝试了一个简单的新包名称:APiToolBundle

以下是src/ApiToolBundle/Resources/config/config.yml的内容:

此文件由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%'
我基于以下文件:


但我不确定能理解一切,因为他们用另一种方式谈论梅金。。。我是否需要执行其他操作来加载我自己的bundle配置文件?

这确实有点棘手。bundle配置与您在服务配置中使用的参数不同,即使在配置中您也可以定义服务,这在一开始似乎有点奇怪。这就是为什么版本4中的Symfony不鼓励在应用程序内部使用语义配置,而不使用bundle&configuration,而是直接使用参数和服务的原因之一

您需要将配置映射到参数,或者直接将它们注入到您需要它们的服务中,以防您不希望它们对其他服务公开可用,或者使用getParameter从容器中提取。您可以在有权访问ContainerBuilder的扩展中执行此操作

例如,请参见FrameworkExtension,其中有更改容器的大型配置:

在您的情况下,它可能看起来像这样:

公共函数loadarray$configs,ContainerBuilder$container { $configuration=新配置; $config=$this->processConfiguration$configuration,$configs; $loader=new loader\YamlFileLoader$container,new FileLocator__DIR__.'/../Resources/config'; $loader->load'services.yml'; 下面是新的部分,其余部分是从你的问题中复制出来的 如果您只想在服务内部使用配置值: $container->getDefinition'ApiToolBundle\Service\MyApi'->setArgument 要使用api url的参数的0偏移量 $config['api_url'] ; 如果要使这些值作为参数公开,请执行以下操作: $container->setParameter'api_tool.api_url',$config['api_url']; }
我明天要测试,但看起来很复杂。。。为什么Symfony 3没有自动执行此过程..好的,似乎只适用于一个参数,但是如果我的服务需要更多参数呢?例如,我需要注入一个数组?这不依赖于配置,但作为arrya从用户安全实体获得的凭据,似乎很重。最好只从服务中的容器获取参数?如果我把我的配置文件放在主app/config/config.yml上,看起来还可以,但我不能使用包中的config.yml,那么不要尝试这样做?我只需要在PHP代码中定义默认值?这似乎太疯狂了。否则,你的app/config/config.yml中api_工具下的配置将毫无意义,因为Symfony无法判断它将发生什么。您仅有的通用配置是服务:和参数:您可以在app/config/config.yml、app/config/services.yml或bundle的services.yml中使用它们,因为Symfony了解这两个块的含义以及如何处理它们。这是否更清楚了?是的,我认为有一种方法可以直接在包中使用config.yml文件。现在我需要找到一种从DI混合注入的方法,以及如何传递一个经典参数。谢谢你的时间和解释
# src/ApiToolBundle/Resources/config/services.yml
ApiToolBundle\Service\MyApi:
  bind:
    $apiUrl: '%api_tool.api_url%'