diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php
index 92f4739cb..c4f217896 100644
--- a/DependencyInjection/Configuration.php
+++ b/DependencyInjection/Configuration.php
@@ -51,6 +51,17 @@ public function getConfigTreeBuilder()
$this->addDbalSection($rootNode);
$this->addOrmSection($rootNode);
+ $rootNode
+ ->children()
+ ->arrayNode('prng')
+ ->children()
+ ->scalarNode('connection')->cannotBeEmpty()->isRequired()->end()
+ ->scalarNode('table_name')->defaultValue('seed_table')->cannotBeEmpty()->end()
+ ->end()
+ ->end()
+ ->end()
+ ;
+
return $treeBuilder;
}
diff --git a/DependencyInjection/DoctrineExtension.php b/DependencyInjection/DoctrineExtension.php
index 04a1ec191..8c6ddb90d 100644
--- a/DependencyInjection/DoctrineExtension.php
+++ b/DependencyInjection/DoctrineExtension.php
@@ -47,6 +47,32 @@ public function load(array $configs, ContainerBuilder $container)
if (!empty($config['orm'])) {
$this->ormLoad($config['orm'], $container);
}
+
+ if (!empty($config['prng'])) {
+ $this->secureRandomLoad($config['prng'], $container);
+ }
+ }
+
+ protected function secureRandomLoad(array $config, ContainerBuilder $container)
+ {
+ $loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
+ $loader->load('prng.xml');
+
+ $container
+ ->getDefinition('doctrine.security.seed_provider')
+ ->replaceArgument(0, new Reference('doctrine.dbal.'.$config['connection'].'_connection'))
+ ->replaceArgument(1, $config['table_name'])
+ ;
+ $container->setAlias('security.prng_seed_provider', 'doctrine.security.seed_provider');
+
+ $container
+ ->getDefinition('doctrine.security.prng_schema_listener')
+ ->addTag('doctrine.event_listener', array('connection' => $config['connection'], 'event' => 'postGenerateSchema', 'lazy' => true))
+ ;
+ $container
+ ->getDefinition('doctrine.security.prng_schema')
+ ->replaceArgument(0, $config['table_name'])
+ ;
}
/**
diff --git a/Resources/config/prng.xml b/Resources/config/prng.xml
new file mode 100644
index 000000000..d8339fa48
--- /dev/null
+++ b/Resources/config/prng.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ Symfony\Bridge\Doctrine\Security\DoctrineSeedProvider
+ Symfony\Bridge\Doctrine\Security\PrngSchema
+ Symfony\Bridge\Doctrine\Security\EventListener\PrngSchemaListener
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Resources/config/schema/doctrine-1.0.xsd b/Resources/config/schema/doctrine-1.0.xsd
index 76170b95d..21d982b60 100644
--- a/Resources/config/schema/doctrine-1.0.xsd
+++ b/Resources/config/schema/doctrine-1.0.xsd
@@ -10,6 +10,7 @@
+
@@ -187,4 +188,9 @@
+
+
+
+
+