3

次の構成を処理したい:

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

次のように、arrayNode を追加する必要があることは明らかです。

$rootNode
    ->children()
        ->arrayNode('transitions')
            ->beforeNormalization()
                ->ifArray()
                    ->then(function($values) {
                        return array('transition' => $values);
                    })
                ->end()
            ->end()
        ->end()
    ->end()
;

しかし、これにより、メッセージとともに InvalidConfigurationException が表示されます

Unrecognized options "transitions" under "acme_demo.state_machine"

これらの「内部」値をどのように処理すればよいですか?

4

1 に答える 1

3

質問を書き留めた直後に、何時間も試行した後の大きなストレスにより、解決策にたどり着きました。

$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()
    ;
于 2012-12-17T23:32:59.183 に答える