Обработка нескольких конфигов Symfony в одном комплекте

1

У меня есть множество пакетов, которые имеют похожие конфигурационные файлы, называемые rules.yml, хранящиеся в BundleName/Resources/config/rules.yml. Каждый файл конфигурации следует той же структуре:

bundle_name:
    rules:
      name:
      items: []
      requirements: []

У меня есть один пакет RulerBundle. Этот пакет должен автоматически загружать, проверять и комбинировать все rules.yml, найденные в других пакетах. Я бы хотел, чтобы RulerBundle создавал что-то вроде:

bundle_a:
    rules:
      name: Rule 1
      items: ['First Item']
      requirements: ['Second Item', 'Third Item']
bundle_b:
    rules:
      name: Rule 2
      items: ['Second Item']
      requirements: ['Third Item']

Это должно автоматически обновляться при добавлении нового пакета с помощью правила.yml

Вопросов

  • Должен ли я проверять и обрабатывать конфигурацию в каждом комплекте? Это приведет к дублированию кода, поскольку правила проверки будут такими же.

  • Как я могу найти и слить каждую из конфигураций связки с помощью RulerBundle

  • 0
    Это может быть полезным советом для вас: stackoverflow.com/a/33446045/1348344 Я описываю, как работать с конфигурацией сборки аналогичным образом.
  • 0
    @pfwd"I "У меня много пакетов" - есть ли у вас все это в одном приложении или они являются независимыми пакетами из основного приложения?
Теги:

1 ответ

0

Таким образом, вы можете написать расширение DependencyInjection в своем пакете верхнего уровня, который будет выполнять всю проверку. Не уверен, что должно произойти, если что-то недействительно, но вы можете что-то вроде этого:

// src/BundleName/DependencyInjection/BundleExtension.php
namespace Acme\HelloBundle\DependencyInjection;

use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Extension\PrependExtensionInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

class BundleName extends Extension implements PrependExtensionInterface
{
    public function prepend(ContainerBuilder $container)
    {
        $bundles = $container->getParameter('kernel.bundles');
        foreach ($bundles as $name => $extension) {
            $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.$name.'/../../Resources/config'));
            // load the configuration file, returned as an array
            $config = $loader->loadFile('rules.yml');

            // validate the contents of your file
            $this->validateConfig($config);

            // append the config with the specified bundle name "bundle_a", "bundle_a"
            $container->prependExtensionConfig($name, $config);
        }
    }
}

не тестировали ни одно из них, но в целом это основная идея. Вам нужно будет реализовать свой метод проверки конфигурации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню