Я работаю над переносом существующего проекта Symfony 2.8
на Symfony 3.4
.То, как импортируются сервисы комплектов, отличается в этих версиях Symfony, и мне интересно, каковы плюсы и минусы разных подходов.
Существующий проект был собран с использованием разных комплектов, где каждый комплект имеет свой собственный XYBundle\Resources\services.yml
file и файл 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
.Вместо этого все классы в этом пакете автоматически становятся доступными как сервисы, используя autowire и autoconfigure в файле app/config/services.yml
.
Мне известно, что autowire было добавлено в Symfony 3.3
и что это отличный способ автоматически добавлять службы и добавлять к ним параметры.Очевидно, что XYBundle\Resources\services.yml
файл больше не нужен, когда используется autowire.
Однако, есть ли разница в использовании "старого" способа расширения для добавления / импорта пакета *Файл 1036 * и новый способ его импорта в app/config/config.yml
?