我正在将现有的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
的新方式有何区别?