phpsymfonysymfony-components

How to parse arrays of arrays with symfony/config?


I want to parse a config of this structure:

$config = [
    'streams' => [
        'foo' => [
            [
                'id' => 'some-identifier',
                'type' => 'a',
            ],
            [
                'id' => 'some-other-identifier',
                'type' => 'b',
            ],
        ],
        'bar' => ...,
    ],
];

In this array streams is a predefined key and contains a map of multiple arbitrarily named streams. In this case there are two streams called foo and bar defined.

Every stream has an array of handlers. Every handler is a map with 2 attributes: id and type.

I ended up with:

$rootNode
    ->children()
        ->arrayNode('streams')
            ->prototype('array')
                ->children()

                ->end()
            ->end()
        ->end()
    ->end()
;

And now I'm in stuck on what would be next.

If I explain in English it would be: streams is a map of arrays of maps.

And with my code I could express it up to "is a map" and in stuck how to say it's "of arrays".

Any hints?


Solution

  • That's how.

    $rootNode
        ->children()
            ->arrayNode('streams')
                ->prototype('array')
                    ->prototype('array')
                        ->children()
                            ->scalarNode('id')->end()
                            ->scalarNode('type')->end()
                        ->end()
                    ->end()
                ->end()
            ->end()
        ->end()
    ;
    

    Note that the outer prototype('array') does not have children()