vendor/symfony/src/Symfony/Bundle/DoctrineBundle/DependencyInjection/Configuration.php
author ymh <ymh.work@gmail.com>
Sat, 24 Sep 2011 15:40:41 +0200
changeset 0 7f95f8617b0b
permissions -rwxr-xr-x
first commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * This file is part of the Symfony package.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * (c) Fabien Potencier <fabien@symfony.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * For the full copyright and license information, please view the LICENSE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * file that was distributed with this source code.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
namespace Symfony\Bundle\DoctrineBundle\DependencyInjection;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
use Symfony\Component\Config\Definition\ConfigurationInterface;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
/**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * This class contains the configuration information for the bundle
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * This information is solely responsible for how the different configuration
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 * sections are normalized, and merged.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 * @author Christophe Coevoet <stof@notk.org>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
class Configuration implements ConfigurationInterface
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
{
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    private $debug;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
     * Constructor
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
     * @param Boolean $debug Whether to use the debug mode
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
    public function  __construct($debug)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
        $this->debug = (Boolean) $debug;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    /**
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
     * Generates the configuration tree builder.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
     *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
     * @return \Symfony\Component\Config\Definition\Builder\TreeBuilder The tree builder
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
     */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
    public function getConfigTreeBuilder()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        $treeBuilder = new TreeBuilder();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        $rootNode = $treeBuilder->root('doctrine');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        $this->addDbalSection($rootNode);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        $this->addOrmSection($rootNode);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        return $treeBuilder;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    private function addDbalSection(ArrayNodeDefinition $node)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        $node
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
            ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
            ->arrayNode('dbal')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
                ->beforeNormalization()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
                    ->ifTrue(function ($v) { return is_array($v) && !array_key_exists('connections', $v) && !array_key_exists('connection', $v); })
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
                    ->then(function ($v) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
                        $connection = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
                        foreach (array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
                            'dbname',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
                            'host',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
                            'port',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
                            'user',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
                            'password',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
                            'driver',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
                            'driver_class',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
                            'options',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
                            'path',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
                            'memory',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
                            'unix_socket',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
                            'wrapper_class',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
                            'platform_service',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
                            'charset',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
                            'logging',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
                            'mapping_types',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
                        ) as $key) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
                            if (array_key_exists($key, $v)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
                                $connection[$key] = $v[$key];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
                                unset($v[$key]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
                            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
                        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
                        $v['default_connection'] = isset($v['default_connection']) ? (string) $v['default_connection'] : 'default';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
                        $v['connections'] = array($v['default_connection'] => $connection);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
                        return $v;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
                    })
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
                ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
                ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
                    ->scalarNode('default_connection')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
                ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
                ->fixXmlConfig('type')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
                    ->arrayNode('types')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
                        ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
                        ->prototype('scalar')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
                    ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
                ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                ->fixXmlConfig('connection')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
                ->append($this->getDbalConnectionsNode())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
        ;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
    private function getDbalConnectionsNode()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
        $treeBuilder = new TreeBuilder();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
        $node = $treeBuilder->root('connections');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
        $node
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
            ->requiresAtLeastOneElement()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
            ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
            ->prototype('array')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
                ->fixXmlConfig('mapping_type')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
                ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
                    ->scalarNode('dbname')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
                    ->scalarNode('host')->defaultValue('localhost')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
                    ->scalarNode('port')->defaultNull()->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
                    ->scalarNode('user')->defaultValue('root')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
                    ->scalarNode('password')->defaultNull()->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                    ->scalarNode('driver')->defaultValue('pdo_mysql')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
                    ->scalarNode('path')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                    ->booleanNode('memory')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                    ->scalarNode('unix_socket')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
                    ->scalarNode('platform_service')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
                    ->scalarNode('charset')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
                    ->booleanNode('logging')->defaultValue($this->debug)->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
                    ->scalarNode('driver_class')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
                    ->scalarNode('wrapper_class')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
                    ->arrayNode('options')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
                        ->useAttributeAsKey('key')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
                        ->prototype('scalar')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
                    ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
                    ->arrayNode('mapping_types')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
                        ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
                        ->prototype('scalar')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
                    ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
                ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
        ;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
        return $node;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
    private function addOrmSection(ArrayNodeDefinition $node)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
        $node
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
            ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
                ->arrayNode('orm')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
                    ->beforeNormalization()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
                        ->ifTrue(function ($v) { return null === $v || (is_array($v) && !array_key_exists('entity_managers', $v) && !array_key_exists('entity_manager', $v)); })
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
                        ->then(function ($v) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
                            $v = (array) $v;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
                            $entityManager = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
                            foreach (array(
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
                                'result_cache_driver', 'result-cache-driver',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
                                'metadata_cache_driver', 'metadata-cache-driver',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
                                'query_cache_driver', 'query-cache-driver',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
                                'auto_mapping', 'auto-mapping',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
                                'mappings', 'mapping',
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
                                'connection', 'dql'
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
                            ) as $key) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
                                if (array_key_exists($key, $v)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
                                    $entityManager[$key] = $v[$key];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
                                    unset($v[$key]);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
                                }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
                            }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
                            $v['default_entity_manager'] = isset($v['default_entity_manager']) ? (string) $v['default_entity_manager'] : 'default';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
                            $v['entity_managers'] = array($v['default_entity_manager'] => $entityManager);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
                            return $v;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
                        })
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
                    ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
                    ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
                        ->scalarNode('default_entity_manager')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
                        ->booleanNode('auto_generate_proxy_classes')->defaultFalse()->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
                        ->scalarNode('proxy_dir')->defaultValue('%kernel.cache_dir%/doctrine/orm/Proxies')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
                        ->scalarNode('proxy_namespace')->defaultValue('Proxies')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
                    ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
                    ->fixXmlConfig('entity_manager')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
                    ->append($this->getOrmEntityManagersNode())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
                ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
        ;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
    private function getOrmEntityManagersNode()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        $treeBuilder = new TreeBuilder();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
        $node = $treeBuilder->root('entity_managers');
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
        $node
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
            ->requiresAtLeastOneElement()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
            ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
            ->prototype('array')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
                ->addDefaultsIfNotSet()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
                ->append($this->getOrmCacheDriverNode('query_cache_driver'))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
                ->append($this->getOrmCacheDriverNode('metadata_cache_driver'))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
                ->append($this->getOrmCacheDriverNode('result_cache_driver'))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
                ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
                    ->scalarNode('connection')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
                    ->scalarNode('class_metadata_factory_name')->defaultValue('Doctrine\ORM\Mapping\ClassMetadataFactory')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
                    ->scalarNode('auto_mapping')->defaultFalse()->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
                ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
                ->fixXmlConfig('hydrator')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
                ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
                    ->arrayNode('hydrators')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
                        ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
                        ->prototype('scalar')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
                    ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
                ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
                ->fixXmlConfig('mapping')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
                ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
                    ->arrayNode('mappings')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
                        ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
                        ->prototype('array')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
                            ->beforeNormalization()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
                                ->ifString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
                                ->then(function($v) { return array('type' => $v); })
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
                            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
                            ->treatNullLike(array())
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
                            ->treatFalseLike(array('mapping' => false))
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
                            ->performNoDeepMerging()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
                            ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
                                ->scalarNode('mapping')->defaultValue(true)->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
                                ->scalarNode('type')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
                                ->scalarNode('dir')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
                                ->scalarNode('alias')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
                                ->scalarNode('prefix')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
                                ->booleanNode('is_bundle')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
                            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
                        ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
                    ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
                    ->arrayNode('dql')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
                        ->fixXmlConfig('string_function')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
                        ->fixXmlConfig('numeric_function')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
                        ->fixXmlConfig('datetime_function')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
                        ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
                            ->arrayNode('string_functions')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
                                ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
                                ->prototype('scalar')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
                            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
                            ->arrayNode('numeric_functions')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
                                ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
                                ->prototype('scalar')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
                            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
                            ->arrayNode('datetime_functions')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
                                ->useAttributeAsKey('name')
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
                                ->prototype('scalar')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
                            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
                        ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
                    ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
                ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
        ;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
        return $node;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
    private function getOrmCacheDriverNode($name)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
    {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
        $treeBuilder = new TreeBuilder();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
        $node = $treeBuilder->root($name);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
        $node
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
            ->addDefaultsIfNotSet()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
            ->beforeNormalization()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
                ->ifString()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
                ->then(function($v) { return array('type' => $v); })
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
            ->children()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
                ->scalarNode('type')->defaultValue('array')->isRequired()->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
                ->scalarNode('host')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
                ->scalarNode('port')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
                ->scalarNode('instance_class')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
                ->scalarNode('class')->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
            ->end()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        ;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
        return $node;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
}