Я работаю над миграцией существующего 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
файл на всех. Вместо этого все классы в этом пакете автоматически становятся доступными как сервис, используя autowire а также Автоконфигурирование в пределах app/config/services.yml
файл.
Я знаю что autowire был добавлен в Symfony 3.3
и что это отличный способ автоматически добавлять сервисы и добавлять к ним параметры. Это очевидно, что нет XYBundle\Resources\services.yml
Файл нужен больше, когда используется autowire.
Однако, есть ли разница в использовании «старого» расширения для добавления / импорта пакета? services.yml
файл и новый способ импорта в app/config/config.yml
?
Задача ещё не решена.
Других решений пока нет …