Как я могу добавить конфигурации из одного пакета в другой в Symfony 4

Я нашел PrependExtensionInterface в пакет dropzone-symfony-ux-bundle и подумал, что он может быть полезен для следующей проблемы: я хочу добавить пути к security.access_control, как они это делают с веткой и темами. Итак, я попробовал:

    public function prepend(ContainerBuilder $container)
    {
        $bundles = $container->getParameter('kernel.bundles');

        if (isset($bundles['SecurityBundle'])) {
            $config = $this->processConfiguration(new Configuration(), $container->getExtensionConfig('security'));
            $config['access_control'][] = ['path' => '^my/new/path', 'role' =>'IS_AUTHENTICATED_ANONYMOUSLY'];
            $container->prependExtensionConfig('security', $config);
        }
    }

Но я получаю сообщение об ошибке processConfiguration (), сообщающее мне, что все ключи безопасности неизвестны, и показывает мне известные ключи из моего пакета:

Unrecognized options "providers, role_hierarchy, encoders, firewalls" under "<name of my bundle>". Available options are ... (keys from my bundle configuration)

Если я протестирую его с помощью ветки вместо безопасности, я получаю ту же ошибку, но с ключевыми словами веточки (очевидно). Все, что я делаю отличным от UX-Dropzone, - это то, что у моего Bundle есть класс Configuration в DependencyInfection.

Любая идея, что я делаю не так? Или лучше рабочее решение?

ОБНОВИТЬ:

    public function prepend(ContainerBuilder $container)
    {
        $bundles = $container->getParameter('kernel.bundles');

        if (isset($bundles['SecurityBundle'])) {
            $securityExtension = new SecurityExtension();
            $securityExtension->prepend($container);
            $securityExtension->load([], $container);
            $configuration = $securityExtension->getConfiguration([],$container);
            $config = $this->processConfiguration($configuration, $container->getExtensionConfig('security'));
            $config['access_control'][] = ['path' => '^my/new/path', 'role' =>'IS_AUTHENTICATED_ANONYMOUSLY'];
            $container->prependExtensionConfig('security', $config);
        }
    }

Теперь я использовал правильную конфигурацию, но она не работает:

Unrecognized options "anonymous, guard, remember_me" under "security.firewalls.main". Available options are "access_denied_handler", "access_denied_url", "context", "entry_point", "host", "logout", "logout_on_user_change", "methods", "pattern", "provider", "request_matcher", "security", "stateless", "switch_user", "user_checker".

Думаю, я пропустил некоторые фабрики, но я не могу переделать весь пакет безопасности для этого ...

он ведет себя так, потому что класс Configuration, который вы загружаете, взят из вашего пакета, а не из пакета Security. Лучше подумать над вопросом: почему вы пытаетесь это сделать? Наверное, есть решение получше. Взгляните на пакет безопасности и посмотрите, какие параметры он публикует, и, возможно, вы сможете получить от этого нужную ценность.

craigh 07.04.2021 14:00

Спасибо. Я понимаю. К сожалению, для создания экземпляра конфигурации пакета безопасности вам понадобятся два дополнительных объекта, которых у меня нет. Таким образом, это решение не работает для безопасности, но, возможно, для других пакетов с обычным объектом конфигурации.

Jörg Sommer 08.04.2021 09:06

Есть ли другое универсальное решение для добавления значений или установки значений по умолчанию в конфигурации внешнего пакета из вашего собственного пакета?

Jörg Sommer 08.04.2021 09:07
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
23
0

Другие вопросы по теме