Где хранить пользовательские настройки в Symfony 2 и какой сервис за это отвечает?
Слышал что пользовательские настройки можно хоранить в базе данных, uml, ini и сервис контейнере..
Собственно вот вопросы:
1. Где можно хранить настройки в Symfony 2?
2. Какой вариант лучше?
3. Какой класс / метод / сервис за это отвечает? В какую сторону копать?
что значит "пользовательские настройки"? конфиги проекта? По умолчанию в yaml, в app/config. За конфиги отвечает symfony/config, для бандлов настраивается в DependenciInjection директории.
Пользовательские настройки то есть свои настройки, своего приложения.
Например, я хочу хранить в настройках количество новостей выводимых на странице, например 10. Где мне эту настройку лучше всего хранить?
Исходя из потребностей. Если вам нужно это дело менять, ну, например, в настройках админки - то тогда придется писать свой какой-то сервис, который бы все это дело в базе хранил. А так это можно вынести в настройки бандла вашего в config.yml.
И да, настройки доступны из контейнера. По хорошему у вас должен быть сервис предоставляющий данные, если у вас doctrine то это репозиторий доктрины для ваших энтитей. В них это дело можно инджектить. Или же брать в контроллерах руками через тот же контейнер, но мне такой подход не особо нравится...
Разумеется это дело нужно будет потом менять. Такие настройки типа "количество новостей на странице" не статические и должна быть возможность их изменять.
Получается, что если мы хотим динамические настройки то нужно хранить их в базе, а статические настройки (не изменяемые) храним в yml? Так?
@skuridin, вы предлагаете выкинуть систему кеширования тогда? Вы не можете (да и не должны) позволять пользователям из админки редактировать config.yml. Или по cron-у чистить его? Конфиги бандлов нужны для... работы бандла а не для такой ерунды как настройки количества постов. Эту логику уже реализовывать нужно самостоятельно, с хранением хоть в файлах, хоть в базе + кэш.
Я обычно не парюсь и выношу это все в статический конфиг. Если нужно что-то поправить - поменял конфиг, ребилднул кэш и готово. Все равно это нужно не чаще раза в пол года.
Ну да. Но я когда сделаю сайт (и не только я), то управление админкой передаю третьему лицу (для кого он разрабатывался). А тот по желанию может сам менять такие настройки. После 20-ти созданных таких сайтов, тяжело менять каждому клиенту через каждые пол года этот самый конфиг. Поэтому статический конфиг для этого не подойдёт. Но использование БД в данном случае для меня сомнительно. Использовать каждый раз лишние запросы мне кажется не разумно, гораздо разумнее выносить такой конфиг в файлы (аля ini, имхо). Просто я думал у Symfony на этот счёт припасены свои плюшки..
Можно сделать сервис, из которого дергать эти параметры.
Если опция привязана к текущему пользователю (пользователь в настройках профиля указывает количество новостей на странице, или на странице новостей есть выбор), как вариант, можно добавить поле options к классу user с типом array.