@remlin1000
любитель

Как хранить пользовательские настройки в Symfony?

Здравствуйте.
Только начинаю изучать Symfony, возник вопрос.
Мне необходимо сохранять/читать настройки моего приложения.
Почитав документацию, понял, что в Symfony лучше хранить настройки в YML файлах.
Итак, создал YML файл (setting.yml), например:
organization:
   office_1:
      set_1: "example_1"
      set_2: "example_2"
      ...
   office_2:
      set_1: "example_1"
      set_2: "example_2"
      ...


Читаю настройки без проблем таким образом:
получаю массив:
$value = Yaml::parseFile($this->get('kernel')->getRootDir() . '/setting.yml');

Потом получаю нужную мне настройку из массива.
Возникла проблема с записью настроек в файл. В соответствии с документацией есть метод:
$yaml = Yaml::dump($array);
file_put_contents('/setting.yaml', $yaml);

Но данный метод перезаписывает заново все настройки в файле, что меня не устраивает.
Можно ли как-то изменить значение определенного элемента в фале настроек по ключу, не перезаписывая весь файл?
Спасибо!
Или может быть есть какой-то другой способ хранения настроек приложения? может быть xml?
  • Вопрос задан
  • 235 просмотров
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Не надо в файл. Пишите в базу данных
Ответ написан
Комментировать
kylt_lichnosti
@kylt_lichnosti
На самом деле формат не играет роли. Симфа поддерживает yaml, xml, php.
Другой вопрос, что если это реально настройки приложения и они не динамические, а постоянные, вроде паролей, баз данных и т.п. То тогда используйте параметры:
https://symfony.com/doc/current/service_container/...

На счет перезаписывания файла - вы читайте его содержимое, в получившемся массиве меняйте, что вам надо и его же сохраняйте вашим методом. Я так делал. Но этот вариант для редкой работы одновременно только одного человека (админа например). Если с этим файлом должно работать сразу несколько человек одновременно, то, как написали выше, надо использовать базу.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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