Можно ли изменять конфиг файл yml в symfony 4 с помощью кода?

Доброе время суток, у меня в проекте есть yml конфиг который допустим лежит тут
./config/packages/dev/parameters.yml

Содержимое в нем такое:
parameters:
    var1: 'data1'
    var2: 'data2'

В самой symfony я очень удобно получаю значения этого конфига примерно так
$this->getContainer()->getParameter('var1');
$this->getContainer()->getParameter('var2');

Это прикольно и удобно - но есть ли возможность также удобно добавить какой то параметр в этот конфиг?
parameters:
    var1: 'data1'
    var2: 'data2'
    var3: 'data3'

Я нарыл в исходном коде что там есть setParameter но при его использовании я получаю ошибку
$this->getContainer()->setParameter('var3','data3');

In srcApp_KernelDevDebugContainer.php line 1605:
                                                      
  Impossible to call set() on a frozen ParameterBag.

Вообщем походу это не совсем то - подскажите как можно сделать не вкручивая кучу кастылей? Я уверен что есть готовые решения.
  • Вопрос задан
  • 331 просмотр
Пригласить эксперта
Ответы на вопрос 2
@EvgeniiR
https://github.com/EvgeniiR
$this->getContainer()

Это прикольно и удобно

Это не хорошо.

Править сконфигурированный контейнер можно в compiler passes

Больше его нигде в коде не нужно доставать в принципе. Никаких $this->getContainer().
Конфигурируйте и инжектите сервисы через конфигурацию - https://symfony.com/doc/current/service_container.... .

Сейчас вы просто используете контейнер не по назначению.
Ответ написан
Комментировать
@shude
1. Если вы работаете с симфони 4.1+ , то получение параметров конфигурации следует производить с помощью
Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;


class SomeClass{
    private $params;
    public function __construct(ParameterBagInterface $params)
    {
        $this->params = $params;
    }

    public function someMethod()
    {
        $parameterValue = $this->params->get('parameter_name');
    }
}


2. Если у вас возникла необходимость править файлы конфига динамически, то скорее всего вы не удачно спроектировали логику приложения. Этот вопрос можно сравнить с чем-то вроде, "а можно ли редактировать css файлы с помощью кода" , ответ - можно, но действительно ли это необходимо ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы