Миграция Symfony 3.4 - Как добавить пакетные сервисы?AppExtension против config.yml против services.yml - PullRequest
0 голосов
/ 11 декабря 2018

Я работаю над переносом существующего проекта 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?

...