Как получить доступ к добавленному мной блоку конфигурации?

Я так понимаю, что конфиг пишется для бандла, и без использования бандла добавить новую секцию в config/services.yaml - не получится. Поэтому я написал конфиг (добавив новую секцию как и хотел), добавил классы src/DependencyInjection/AppSettingsConfiguration.php и src/DependencyInjection/AppSettingsExtension.php, добавил строку в фаил config/bundles.php для подключения бандла.

Но как использовать написанную мною конфигурацию - не пойму. Банально не могу понять как получить доступ к добавленному мной конфигу. DUMP() в src/DependencyInjection/AppSettingsExtension.php выводит добавленное мной дерево в виде массива, ошибок не вылетает. Но как, например, в контроллере получить доступ, или в сервисе, или в твиге...

Помогите плиз!

class AppSettingsExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new AppSettingsConfiguration();
        $config = $this->processConfiguration($configuration, $configs);

        dump($config);
    }
}

class AppSettingsConfiguration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('app_settings');

        $rootNode
            ->children()
                ->arrayNode('menuItems')
                    ->children()
                        ->arrayNode('mappings')
                            ->useAttributeAsKey('name')
                            ->arrayPrototype()
                            ->children()
                                ->scalarNode('class')->end()
                                ->scalarNode('type')->end()
                                ->scalarNode('trans')->end()
                            ->end()
                        ->end()
                    ->end()
                ->end()
            ->end();

        return $treeBuilder;
    }
}

app_settings:
    menuItems:
        mappings:
            MenuItemCategory:
                class: 'App\Entity\MenuItemCategory'
                type: 'App\Form\Entity\MenuItemCategoryType'
                trans: 'label.menuItem_category_link'
            MenuItemPage:
                class: 'App\Entity\MenuItemPage'
                type: 'App\Form\Entity\MenuItemPageType'
                trans: 'label.menuItem_page_link'
            MenuItemArticle:
                class: 'App\Entity\MenuItemArticle'
                type: 'App\Form\Entity\MenuItemArticleType'
                trans: 'label.menuItem_article_link'
            MenuItemSimple:
                class: 'App\Entity\MenuItemSimple'
                type: 'App\Form\Entity\MenuItemSimpleType'
                trans: 'label.menuItem_simple_link'
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
Maksclub
@Maksclub
maksfedorov.ru
В Extension бандла получите из конфига значение и положите в контейнер (он доступен вторым параметром в методе load()):
$container->setParameter('your.service.name.mapping', $config['menuItems']['mapping']);

И же в контроллер/любой другой сервис пробрасывайте в конструктор эти значения:
arguments:
 - 'your.service.name.mapping'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы