Symfony4 правильный способ обработки настроек конфигурации параметров

Я работаю в компании с несколькими приложениями Symfony.
У нас есть поставщик "CommonBundle".
Этот пакет должен определить некоторую конфигурацию для всех приложений, определенных app
. пример: project_name_prefix / regex_format_for_title

Мой вопрос: Как я должен использовать эту конфигурацию для своих проектов?

  • Поместите значение в раздел parameters: в services.yml и перечислите все необходимые значения
    Если добавлен новый параметр, как указать всем приложениям заполнить этот новый параметр?
  • Поместите ConfigurationExtension в мой пакет и определите мое дерево
    Затем создайте файл config/packages/common_domain.yml и добавьте мою конфигурацию?
  • Создайте ConfigurationExtension, а затем сопоставьте значения с параметрами с помощью '%project_name%'.

В моем коде с параметрами я могу использовать $this->container->getParameter('...'), но с ConfigurationExtension в DI, как я могу получить значения?

ОБНОВИТЬ

Цель моего вопроса - узнать, когда использовать значение параметра и при настройке дерева.
Например, кодировка доктрины выглядит так:

doctrine:
    dbal:
        charset: utf8

Это причина не просто использовать такой параметр, как

parameters:
    doctrine_dbal_charset: utf8

А потом $this->container->getParameter('doctrine_dbal_charset')

Это может вам помочь: tomasvotruba.cz/blog/2018/11/29/…

Tomas Votruba 31.01.2019 12:31

Ваш второй вариант - правильный подход. Используйте файл common.yml в сочетании с расширением для обработки конфигурации. Изучите создание расширений, чтобы увидеть, как предоставить данные конфигурации остальной части вашего кода. И хотя это немного не по теме, в Symfony 4 должно быть очень мало случаев, когда нужно будет использовать $container->getParameter или get().

Cerad 31.01.2019 14:11

Похоже, вы немного подкорректировали свой вопрос. Чтобы обратиться к вашему конкретному примеру доктрины_dbal_charset, вы должны знать, что доктрина позволяет вам настроить несколько соединений, каждое из которых потенциально поддерживает разные наборы символов. Попробуйте выяснить, как это сделать, используя только параметры. На самом деле взгляните на то, что делает расширение DoctrineBundle, и попытайтесь понять, как свести его к набору параметров. В идеале со значениями по умолчанию и проверкой ошибок.

Cerad 31.01.2019 20:51
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
3
53
1

Ответы 1

На этот вопрос есть подробный ответ в официальная документация Symfony.

Официально предлагаемый способ - использовать переменные среды или файлы .env и ссылаться на эти переменные в параметрах как %env(VARIABLE_NAME)%.

AFAIK, переменная .env предназначена для чувствительного значения, верно? как database_url, но в моем случае это только имя_проекта. Я обновил свой вопрос, чтобы быть более точным,

Lerminou 31.01.2019 14:25

@Lerminou ничто не мешает вам передавать любую информацию через переменные среды

Flying 31.01.2019 14:48

да, я согласен с вами, но, пожалуйста, прочитайте мое обновление, мой вопрос: где я должен заполнить env var? например, database_url доктрины установлен в treeBuilder в файле конфигурации доктрины doctrine:dbal:url:. Почему бы им просто не использовать ключ параметра?

Lerminou 31.01.2019 14:52

@Lerminou Я вижу, ваш вопрос больше для совета, чем для технического аспекта. Я согласен с Cerad в том, что построение конфигурации для вашего пакета будет наиболее гибким подходом, и это позволит вам предоставить разумные значения по умолчанию для приложений, которые не сразу распознают новые параметры конфигурации. Он также предоставляет хорошие возможности для проверки/нормализации данных.

Flying 31.01.2019 15:22

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