通过编译器通道覆盖扩展配置

问题描述 投票:0回答:1

希望你做得很好,我正在尝试通过某种自定义

Compiler Pass
覆盖现有的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());
    }
}

我的新配置没有被考虑在内,无法正常工作的问题。

php symfony api-platform.com
1个回答
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);
    }
}

我可能有一些细节错误,但这可能会给你一个正确方法的开始。

© www.soinside.com 2019 - 2024. All rights reserved.