root('database'); $databaseNodeBuilder = $databaseNode->children(); $connectionNode = $this->buildConnectionNode('connection', false); $databaseNodeBuilder->append($connectionNode); $connectionsNode = $this->buildConnectionNode('connections', true); $connectionsNode ->validate() ->ifTrue( function ($connections) { return !isset($connections[static::THELIA_CONNECTION_NAME]); } ) ->thenInvalid( "The '" . static::THELIA_CONNECTION_NAME . "' connection must be defined." ); $databaseNodeBuilder->append($connectionsNode); $databaseNode ->validate() ->ifTrue( function ($database) { return !empty($database['connection']) && !empty($database['connections']); } ) ->thenInvalid( "The 'database' node must contain either a 'connection' node or a 'connections' node, but not both." ); return $treeBuilder; } /** * Build a configuration node describing one or more database connection * @param string $rootName Node name. * @param bool $isArray Whether the node is a single connection or an array of connections. * @return ArrayNodeDefinition|NodeDefinition Connection(s) node. */ public function buildConnectionNode($rootName, $isArray) { $treeBuilder = new TreeBuilder(); $connectionNode = $treeBuilder->root($rootName); if ($isArray) { /** @var ArrayNodeDefinition $connectionNodePrototype */ $connectionNodePrototype = $connectionNode->prototype('array'); $connectionNodeBuilder = $connectionNodePrototype->children(); } else { $connectionNodeBuilder = $connectionNode->children(); } $connectionNodeBuilder->scalarNode('driver') ->defaultValue('mysql'); $connectionNodeBuilder->scalarNode('user') ->defaultValue('root'); $connectionNodeBuilder->scalarNode('password') ->defaultValue(''); $connectionNodeBuilder->scalarNode('dsn') ->cannotBeEmpty(); $connectionNodeBuilder->scalarNode('classname') ->defaultValue('\Propel\Runtime\Connection\ConnectionWrapper'); return $connectionNode; } }