Symfony 3.4迁移-如何添加捆绑服务? AppExtension与config.yml与services.yml

时间:2018-12-11 12:59:58

标签: php symfony autowired

我正在将现有的Symfony 2.8项目迁移到Symfony 3.4。在这些Symfony版本中,导入捆绑服务的方式不同,我想知道不同方法的优缺点。

现有项目是使用不同的捆绑软件构建的,其中每个捆绑软件都有自己的XYBundle\Resources\services.yml文件,而XYBundle\DependencyInjection\XYExtension.php文件用于将服务配置添加到容器:

class XYExtension extends Extension {   
    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');
    }
}

这样,在项目中可以使用XYBundle\Resources\services.yml中定义的服务。

Symfony 3.4中创建新的捆绑包时,不会创建任何扩展名。而是将services.yml添加到应用config.yml

// app/config/config.yml
imports:
    - { resource: parameters.yml }
    - { resource: security.yml }
    - { resource: services.yml }
    - { resource: "@XYBundle/Resources/config/services.yml" }

但是,使用AppBundle框架创建的Symfony 3.4根本没有services.yml文件。而是使用app/config/services.yml文件中的 autowire autoconfigure 自动将此捆绑包中的所有类作为服务提供。

我知道在Symfony 3.3中添加了 autowire ,这是一种自动添加服务并向其中添加参数的好方法。很明显,使用自动装配时不再需要XYBundle\Resources\services.yml文件。

但是,使用“旧”扩展方式添加/导入捆绑包services.yml文件和将其导入app/config/config.yml的新方式有何区别?

0 个答案:

没有答案