Nelmio\SolariumBundle\DependencyInjection\Configuration::getConfigTreeBuilder PHP Method

getConfigTreeBuilder() public method

{@inheritDoc}
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder();
        $rootNode = $treeBuilder->root('nelmio_solarium');
        $rootNode->children()->scalarNode('default_client')->cannotBeEmpty()->defaultValue('default')->end()->arrayNode('endpoints')->canBeUnset()->useAttributeAsKey('name')->prototype('array')->beforeNormalization()->ifTrue(function ($v) {
            return isset($v['dsn']);
        })->then(function ($v) {
            $parsed_dsn = parse_url($v['dsn']);
            unset($v['dsn']);
            if ($parsed_dsn) {
                $v['scheme'] = isset($parsed_dsn['scheme']) ? $parsed_dsn['scheme'] : 'http';
                if (isset($parsed_dsn['host'])) {
                    $v['host'] = $parsed_dsn['host'];
                }
                if (isset($parsed_dsn['user'])) {
                    $auth = $parsed_dsn['user'] . (isset($parsed_dsn['pass']) ? ':' . $parsed_dsn['pass'] : '');
                    $v['host'] = $auth . '@' . $v['host'];
                }
                $v['port'] = isset($parsed_dsn['port']) ? $parsed_dsn['port'] : 80;
                $v['path'] = isset($parsed_dsn['path']) ? $parsed_dsn['path'] : '';
            }
            return $v;
        })->end()->addDefaultsIfNotSet()->children()->scalarNode('scheme')->defaultValue('http')->end()->scalarNode('host')->defaultValue('127.0.0.1')->end()->scalarNode('port')->defaultValue(8983)->end()->scalarNode('path')->defaultValue('/solr')->end()->scalarNode('core')->end()->scalarNode('timeout')->defaultValue(5)->end()->end()->end()->end()->arrayNode('clients')->canBeUnset()->useAttributeAsKey('name')->prototype('array')->addDefaultsIfNotSet()->children()->scalarNode('client_class')->cannotBeEmpty()->defaultValue('Solarium\\Client')->end()->scalarNode('adapter_class')->end()->arrayNode('endpoints')->beforeNormalization()->ifString()->then($this->getNormalizeListToArrayClosure())->end()->prototype('scalar')->end()->end()->scalarNode('default_endpoint')->end()->arrayNode('load_balancer')->addDefaultsIfNotSet()->treatFalseLike(array('enabled' => false))->treatTrueLike(array('enabled' => true))->treatNullLike(array('enabled' => true))->beforeNormalization()->ifArray()->then(function ($v) {
            $v['enabled'] = isset($v['enabled']) ? $v['enabled'] : true;
            return $v;
        })->end()->children()->booleanNode('enabled')->defaultFalse()->end()->arrayNode('endpoints')->requiresAtLeastOneElement()->beforeNormalization()->ifString()->then($this->getNormalizeListToArrayClosure())->end()->beforeNormalization()->always(function (array $endpoints) {
            // the values should be the weight and the keys the endpoints name
            // handle the case where people just list the endpoints like [endpoint1, endpoint2]
            $normalizedEndpoints = array();
            foreach ($endpoints as $name => $weight) {
                if (!is_string($name)) {
                    $name = $weight;
                    $weight = 1;
                }
                $normalizedEndpoints[$name] = $weight;
            }
            return $normalizedEndpoints;
        })->end()->prototype('scalar')->end()->end()->arrayNode('blocked_query_types')->defaultValue(array(Client::QUERY_UPDATE))->beforeNormalization()->ifString()->then($this->getNormalizeListToArrayClosure())->end()->prototype('scalar')->end()->end()->end()->end()->arrayNode('plugins')->canBeUnset()->useAttributeAsKey('name')->prototype('array')->validate()->ifTrue(function ($v) {
            return !empty($v['plugin_class']) && !empty($v['plugin_service']);
        })->thenInvalid('Only either a plugin class or a plugin service can be set')->end()->children()->scalarNode('plugin_class')->end()->scalarNode('plugin_service')->end()->end()->end()->end()->end()->end()->end()->end();
        return $treeBuilder;
    }