2015-09-15 5 views
1

Вот контекст:Symfony: Динамическая конфигурация загрузки файла

  • Каждый пользователь мое приложение принадлежит компании.
  • Параметры для каждой компании определены в конфигурационных файлах «company.yml», и все они используют одну и ту же структуру.
  • Эти параметры затем используются для настройки поведения приложения.

Это может показаться тривиальным, но все, что я ищу, это правильный способ загрузки этих конкретных файлов YAML.

Из того, что я понял до сих пор, использование класса Extension невозможно, так как оно не знает о текущем пользователе.

Использование настраиваемой службы для управления этими конфигурациями, а не полагаться на параметры Symfony, кажется более подходящим, но я не могу найти, как реализовать проверку (используя класс конфигурации) и кеширование.

Любая помощь будет принята с благодарностью, спасибо за ваши данные!

ответ

3

Использование компонентов Yaml, процессора и конфигурации Symfony2 должно соответствовать вашим потребностям.

Определите класс "CompanyConfiguration", как если бы вы были в случае внедрение зависимости Создать новую услугу "CompanyLoader"

use Symfony\Component\Yaml\Yaml; 
use Symfony\Component\Config\Definition\Processor; 

$companies = Yaml::parse('company.yml'); 
$processor = new Processor(); 
$configuration = new CompanyConfiguration(); 
$processor->processConfiguration($configuration, $companies); 

Теперь вы должны быть в состоянии использовать ваш массив компаний, чтобы делать то, что вы хотите

+0

Этот экземпляр процессора может быть тем, что я искал, я обязательно попробую это, спасибо!:) –

+0

Я только что закончил реализацию этого решения, и он работает как шарм. Еще раз спасибо! –

+0

Ты очень рад :) – olaurendeau

1

Посмотрите на http://symfony.com/doc/current/cookbook/configuration/configuration_organization.html, а также http://symfony.com/doc/current/cookbook/configuration/environments.html. Если это не правильный ответ, вам нужно быть более конкретным в отношении вашей конфигурации company.yml.

+0

Большинство, если не вся документация Symfony по этому вопросу (включая эти ссылки) касается конфигурации приложения _global_, в то время как мне нужно работать на уровне запроса. Чтобы предоставить вам пример: - Компания A нуждается в доступе к статистической странице. - Компания B тоже хочет этого, но с дополнительной информацией. - Компания C не нуждается в этом вообще. Используя конфигурационный файл для каждой компании, я могу управлять этими различиями без какого-либо жесткого кодирования. Я не могу полагаться на глобальную и статическую конфигурацию, но мне нужно загрузить соответствующий файл в зависимости от компании текущего пользователя. –

+0

, так что у вас нет одного yml в компании, но многие? потому что, если это только одна компания, я бы сказал о «глобальной» конфигурации - и у вас может быть один prod-env для одной компании, которая затем загружает только yml, который вам нужен, снова используя предоставленные ссылки. – LBA

+0

Получил это. Это отличный и интересный подход, который мне придется попробовать в свободное время :) Поскольку контейнер службы кажется доступным в AppKernel, я должен иметь доступ к текущему пользователю, а затем загружать соответствующий файл conf. Спасибо за ваш вклад! –