Я работаю в компании с несколькими приложениями Symfony.
У нас есть поставщик "CommonBundle".
Этот пакет должен определить некоторую конфигурацию для всех приложений, определенных app
.
пример: project_name_prefix / regex_format_for_title
Мой вопрос: Как я должен использовать эту конфигурацию для своих проектов?
parameters: в services.yml и перечислите все необходимые значенияconfig/packages/common_domain.yml и добавьте мою конфигурацию?'%project_name%'.В моем коде с параметрами я могу использовать $this->container->getParameter('...'), но с ConfigurationExtension в DI, как я могу получить значения?
ОБНОВИТЬ
Цель моего вопроса - узнать, когда использовать значение параметра и при настройке дерева.
Например, кодировка доктрины выглядит так:
doctrine:
dbal:
charset: utf8
Это причина не просто использовать такой параметр, как
parameters:
doctrine_dbal_charset: utf8
А потом $this->container->getParameter('doctrine_dbal_charset')
Ваш второй вариант - правильный подход. Используйте файл common.yml в сочетании с расширением для обработки конфигурации. Изучите создание расширений, чтобы увидеть, как предоставить данные конфигурации остальной части вашего кода. И хотя это немного не по теме, в Symfony 4 должно быть очень мало случаев, когда нужно будет использовать $container->getParameter или get().
Похоже, вы немного подкорректировали свой вопрос. Чтобы обратиться к вашему конкретному примеру доктрины_dbal_charset, вы должны знать, что доктрина позволяет вам настроить несколько соединений, каждое из которых потенциально поддерживает разные наборы символов. Попробуйте выяснить, как это сделать, используя только параметры. На самом деле взгляните на то, что делает расширение DoctrineBundle, и попытайтесь понять, как свести его к набору параметров. В идеале со значениями по умолчанию и проверкой ошибок.




На этот вопрос есть подробный ответ в официальная документация Symfony.
Официально предлагаемый способ - использовать переменные среды или файлы .env и ссылаться на эти переменные в параметрах как %env(VARIABLE_NAME)%.
AFAIK, переменная .env предназначена для чувствительного значения, верно? как database_url, но в моем случае это только имя_проекта. Я обновил свой вопрос, чтобы быть более точным,
@Lerminou ничто не мешает вам передавать любую информацию через переменные среды
да, я согласен с вами, но, пожалуйста, прочитайте мое обновление, мой вопрос: где я должен заполнить env var? например, database_url доктрины установлен в treeBuilder в файле конфигурации доктрины doctrine:dbal:url:. Почему бы им просто не использовать ключ параметра?
@Lerminou Я вижу, ваш вопрос больше для совета, чем для технического аспекта. Я согласен с Cerad в том, что построение конфигурации для вашего пакета будет наиболее гибким подходом, и это позволит вам предоставить разумные значения по умолчанию для приложений, которые не сразу распознают новые параметры конфигурации. Он также предоставляет хорошие возможности для проверки/нормализации данных.
Это может вам помочь: tomasvotruba.cz/blog/2018/11/29/…