Symfony 2 Configuration – Array of associative arrays

Few days ago I have struggled with a problem using Symfony2 configuration. I wanted to add the following kind of configuration to config.yml:

acme_demo:
    transitions:
        - { hc_cba: 180 }
        - { cba_hc: -1 }

The problem was that the stuff under transitions is dynamic, so those hc_cba and cba_hc tags can be pretty much anything. After hitting many errors, I came to the solution:

<?php
$rootNode
    ->children()
        ->arrayNode('state_machine')
            ->requiresAtLeastOneElement()
            ->beforeNormalization()
                ->ifArray()
                    ->then(function($values) {
                        $ret = array();
                        foreach ($values as $value) {
                            foreach ($value as $transition => $time) {
                                $ret[] = array('transition' => $transition, 'time' => e);
                            }
                        }
                        return $ret;
                    })
                ->end()
                ->prototype('array')
                ->children()
                    ->scalarNode('transition')->end()
                    ->scalarNode('time')->end()
                ->end()
            ->end()
        ->end()
    ->end()
;

links

social