<?php
/*
* This file is part of the Symfony CMF package.
*
* (c) Symfony CMF
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Cmf\Bundle\RoutingBundle\DependencyInjection;
use Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Orm\Route;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
/**
* This class contains the configuration information for the bundle.
*
* This information is solely responsible for how the different configuration
* sections are normalized, and merged.
*
* @author David Buchmann
*/
class Configuration implements ConfigurationInterface
{
/**
* Returns the config tree builder.
*
* @return TreeBuilder
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$root = $treeBuilder->root('cmf_routing');
$this->addChainSection($root);
$this->addDynamicSection($root);
return $treeBuilder;
}
private function addChainSection(ArrayNodeDefinition $root)
{
$root
->children()
->arrayNode('chain')
->addDefaultsIfNotSet()
->fixXmlConfig('router_by_id', 'routers_by_id')
->children()
->arrayNode('routers_by_id')
->defaultValue(['router.default' => 100])
->useAttributeAsKey('id')
->prototype('scalar')->end()
->end() // routers_by_id
->booleanNode('replace_symfony_router')->defaultTrue()->end()
->end()
->end()// chain
->end()
;
}
private function addDynamicSection(ArrayNodeDefinition $root)
{
$root
->children()
->arrayNode('dynamic')
->fixXmlConfig('controller_by_type', 'controllers_by_type')
->fixXmlConfig('controller_by_class', 'controllers_by_class')
->fixXmlConfig('template_by_class', 'templates_by_class')
->fixXmlConfig('route_filter_by_id', 'route_filters_by_id')
->fixXmlConfig('locale')
->addDefaultsIfNotSet()
->canBeEnabled()
->children()
->scalarNode('route_collection_limit')->defaultValue(0)->end()
->scalarNode('generic_controller')->defaultNull()->end()
->scalarNode('default_controller')->defaultNull()->end()
->arrayNode('controllers_by_type')
->useAttributeAsKey('type')
->prototype('scalar')->end()
->end() // controllers_by_type
->arrayNode('controllers_by_class')
->useAttributeAsKey('class')
->prototype('scalar')->end()
->end() // controllers_by_class
->arrayNode('templates_by_class')
->useAttributeAsKey('class')
->prototype('scalar')->end()
->end() // templates_by_class
->arrayNode('persistence')
->addDefaultsIfNotSet()
->validate()
->ifTrue(function ($v) {
return count(array_filter($v, function ($persistence) {
return $persistence['enabled'];
})) > 1;
})
->thenInvalid('Only one persistence layer can be enabled at the same time.')
->end()
->children()
->arrayNode('phpcr')
->addDefaultsIfNotSet()
->canBeEnabled()
->fixXmlConfig('route_basepath')
->children()
->scalarNode('manager_name')->defaultNull()->end()
->arrayNode('route_basepaths')
->beforeNormalization()
->ifString()
->then(function ($v) {
return [$v];
})
->end()
->prototype('scalar')->end()
->defaultValue(['/cms/routes'])
->end() // route_basepaths
->booleanNode('enable_initializer')
->defaultValue(true)
->end()
->end()
->end() // phpcr
->arrayNode('orm')
->addDefaultsIfNotSet()
->canBeEnabled()
->children()
->scalarNode('manager_name')->defaultNull()->end()
->scalarNode('route_class')->defaultValue(Route::class)->end()
->end()
->end() // orm
->end()
->end() // persistence
->scalarNode('uri_filter_regexp')->defaultValue('')->end()
->scalarNode('route_provider_service_id')->end()
->arrayNode('route_filters_by_id')
->canBeUnset()
->defaultValue([])
->useAttributeAsKey('id')
->prototype('scalar')->end()
->end() // route_filters_by_id
->scalarNode('content_repository_service_id')->end()
->arrayNode('locales')
->prototype('scalar')->end()
->end() // locales
->integerNode('limit_candidates')->defaultValue(20)->end()
->booleanNode('match_implicit_locale')->defaultValue(true)->end()
->booleanNode('auto_locale_pattern')->defaultValue(false)->end()
->scalarNode('url_generator')
->defaultValue('cmf_routing.generator')
->info('URL generator service ID')
->end() // url_generator
->end()
->end() // dynamic
->end()
;
}
}