getRootNode('chill_activity'); $rootNode ->children() ->arrayNode('form') ->canBeEnabled() ->children() ->arrayNode('time_duration') ->isRequired() ->requiresAtLeastOneElement() ->defaultValue( array( [ 'label' => '5 minutes', 'seconds' => 300], [ 'label' => '10 minutes', 'seconds' => 600], [ 'label' => '15 minutes', 'seconds' => 900], [ 'label' => '20 minutes', 'seconds' => 1200], [ 'label' => '25 minutes', 'seconds' => 1500], [ 'label' => '30 minutes', 'seconds' => 1800], [ 'label' => '45 minutes', 'seconds' => 2700], [ 'label' => '1 hour', 'seconds' => 3600], [ 'label' => '1 hour 15', 'seconds' => 4500], [ 'label' => '1 hour 30', 'seconds' => 5400], [ 'label' => '1 hour 45', 'seconds' => 6300], [ 'label' => '2 hours', 'seconds' => 7200], ) ) ->info('The intervals of time to show in activity form') ->prototype('array') ->children() ->scalarNode('seconds') ->info("The number of seconds of this duration. Must be an integer.") ->cannotBeEmpty() ->validate() ->ifTrue(function($data) { return !is_int($data); })->thenInvalid("The value %s is not a valid integer") ->end() ->end() ->scalarNode('label') ->cannotBeEmpty() ->info("The label to show into fields") ->end() ->end() ->end() // ->validate() // // ->ifTrue(function ($data) { // // test this is an array // if (!is_array($data)) { // return true; // } // // foreach ($data as $k => $v) { // if (!is_string($k)) { // return true; // } // if (!is_int($v)) { // return true; // } // } // // }) // ->thenInvalid("The data are invalid. The keys must be a string and the value integers") // ->end() ->end() ->end() ->end() ->end(); return $treeBuilder; } }