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

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

Я знаю, что автопровод был добавлен в Symfony 3.3 и что это отличный способ автоматически добавлять службы и добавлять к ним параметры. Очевидно, что при использовании autowire файл XYBundle\Resources\services.yml больше не нужен.

Однако есть ли разница в использовании "старого" способа расширения для добавления / импорта файла пакета services.yml и нового способа его импорта в app/config/config.yml?

Принципиально нет разницы между двумя подходами. Если вы посмотрите на FrameworkBundle, то он по-прежнему использует расширение для загрузки сервисов даже в 4.x. Если ваш новый пакет предназначен для совместного использования несколькими приложениями, используйте расширение, чтобы избежать необходимости для каждого приложения явно импортировать его. Если пакет предназначен строго для одного приложения, то использование операторов импорта избавляет вас от необходимости создавать расширение.

Cerad 11.12.2018 15:37

И хотя это немного не по теме, вы можете создать новый проект 3.4 с помощью установщика Flex и наблюдать за новой структурой каталогов. Каталог приложения исчезнет. Использование новой структуры упростит переход на S4 когда-нибудь в будущем.

Cerad 11.12.2018 15:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
439
0

Другие вопросы по теме