/** * {@inheritdoc} */ public function getConfigTreeBuilder() { $builder = new TreeBuilder(); $root = $builder->root('innmind_rest_server'); $root->useAttributeAsKey('name')->prototype('array')->children()->arrayNode('children')->info('Recursive directories of resources')->prototype('variable')->end()->defaultValue([])->end()->arrayNode('resources')->useAttributeAsKey('name')->prototype('array')->children()->scalarNode('identity')->isRequired()->end()->scalarNode('gateway')->isRequired()->end()->arrayNode('properties')->useAttributeAsKey('name')->prototype('array')->children()->scalarNode('type')->isRequired()->end()->arrayNode('access')->prototype('scalar')->end()->defaultValue([Access::READ])->end()->arrayNode('variants')->prototype('scalar')->end()->defaultValue([])->end()->booleanNode('optional')->defaultFalse()->end()->arrayNode('options')->prototype('variable')->end()->defaultValue([])->end()->end()->end()->end()->arrayNode('options')->prototype('variable')->end()->defaultValue([])->end()->arrayNode('metas')->prototype('variable')->end()->defaultValue([])->end()->booleanNode('rangeable')->defaultTrue()->end()->arrayNode('linkable_to')->prototype('scalar')->end()->defaultValue([])->end()->end()->end()->end()->end()->end(); return $builder; }
private function createPropertiesNode() : NodeDefinition { $builder = new TreeBuilder(); $node = $builder->root('properties'); $node->canBeUnset()->useAttributeAsKey('name')->requiresAtLeastOneElement()->prototype('array')->prototype('variable')->end()->beforeNormalization()->always()->then(function ($value) { if (is_string($value)) { return ['type' => $value]; } $type = $value['type'] ?? null; if (empty($type)) { throw new InvalidConfigurationException(); } return $value; })->end()->end(); return $node; }