Я нашел 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. Лучше подумать над вопросом: почему вы пытаетесь это сделать? Наверное, есть решение получше. Взгляните на пакет безопасности и посмотрите, какие параметры он публикует, и, возможно, вы сможете получить от этого нужную ценность.