#symfony #api-platform.com
#symfony #api-platform.com
Вопрос:
Надеюсь, у вас все хорошо, я пытаюсь переопределить существующую конфигурацию платформы api api_platform.mapping.paths
с помощью какого-то пользовательского прохода компилятора
Цель состоит в том, чтобы объединить мою новую конфигурацию с существующей
Вот часть конфигурации, которую я хотел бы обновить в разгар усложнения моего контейнера:
# api/config/packages/api_platform.yaml
api_platform:
mapping:
# The list of paths with files or directories where the bundle will look for additional resource files.
paths: []
Это мой пользовательский проход компилятора:
/**
* Class MergeApiMappingPathsConfigurationPass.
*/
class MergeApiMappingPathsConfigurationPass implements CompilerPassInterface
{
/**
* {@inheritdoc}
*/
public function process(ContainerBuilder $container)
{
$configs = $container->getExtensionConfig('api_platform');
$configs[0]['mapping']['paths'] = array_merge($configs[0]['mapping']['paths'], [__DIR__.'/../../Resources/resources/']);
$container->prependExtensionConfig('api_platform', $configs[0]);
}
}
И это мой корневой пакет, в котором я зарегистрировал свой новый пользовательский компилятор:
class DemoBundle extends Bundle
{
public function build(ContainerBuilder $container)
{
parent::build($container);
$container->addCompilerPass(new MergeApiMappingPathsConfigurationPass());
}
}
Проблема в том, что моя новая конфигурация не учитывается и не работает должным образом.
Ответ №1:
Я не думаю, что вы хотите использовать CompilerPass для этого. Я думаю, вы хотите использовать PrependExtensionInterface
и prepend
метод. (см https://symfony.com/doc/current/bundles/prepend_extension.html )
Что-то вроде
class DemoBundleExtension extends Extension implements PrependExtensionInterface
{
public function prepend(ContainerBuilder $container)
{
if (!isset($container->getExtensions()['api_platform'])) {
return;
}
$configs = $container->getExtensionConfig('api_platform');
$configs[0]['mapping']['paths'] = array_merge($configs[0]['mapping']['paths'], [__DIR__.'/../../Resources/resources/']);
$container->prependExtensionConfig('api_platform', ['mapping' => $configs]);
}
public function build(ContainerBuilder $container)
{
parent::build($container);
}
}
Возможно, я ошибся в некоторых деталях, но это может дать вам начало правильного подхода.
Комментарии:
1. Добавить ! добавить новую конфигурацию перед старой ?