[FrameworkBundle] made a small refactoring

This commit is contained in:
Fabien Potencier 2010-08-18 14:44:35 +02:00
parent 443c7180dc
commit 66a81b362c

View File

@ -103,79 +103,7 @@ class WebExtension extends Extension
}
if (isset($config['validation']['enabled'])) {
if ($config['validation']['enabled']) {
if (!$container->hasDefinition('validator')) {
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
$loader->load($this->resources['validation']);
}
$xmlMappingFiles = array();
$yamlMappingFiles = array();
$messageFiles = array();
// default entries by the framework
$xmlMappingFiles[] = __DIR__.'/../../../Components/Form/Resources/config/validation.xml';
$messageFiles[] = __DIR__ . '/../../../Components/Validator/Resources/i18n/messages.en.xml';
$messageFiles[] = __DIR__ . '/../../../Components/Form/Resources/i18n/messages.en.xml';
foreach ($container->getParameter('kernel.bundles') as $className) {
$tmp = dirname(str_replace('\\', '/', $className));
$namespace = str_replace('/', '\\', dirname($tmp));
$bundle = basename($tmp);
foreach ($container->getParameter('kernel.bundle_dirs') as $dir) {
if (file_exists($file = $dir.'/'.$bundle.'/Resources/config/validation.xml')) {
$xmlMappingFiles[] = realpath($file);
}
if (file_exists($file = $dir.'/'.$bundle.'/Resources/config/validation.yml')) {
$yamlMappingFiles[] = realpath($file);
}
// TODO do we really want the message files of all cultures?
foreach (glob($dir.'/'.$bundle.'/Resources/i18n/messages.*.xml') as $file) {
$messageFiles[] = realpath($file);
}
}
}
$xmlFilesLoader = new Definition(
$container->getParameter('validator.mapping.loader.xml_files_loader.class'),
array($xmlMappingFiles)
);
$yamlFilesLoader = new Definition(
$container->getParameter('validator.mapping.loader.yaml_files_loader.class'),
array($yamlMappingFiles)
);
$container->setDefinition('validator.mapping.loader.xml_files_loader', $xmlFilesLoader);
$container->setDefinition('validator.mapping.loader.yaml_files_loader', $yamlFilesLoader);
$container->setParameter('validator.message_interpolator.files', $messageFiles);
foreach ($xmlMappingFiles as $file) {
$container->addResource(new FileResource($file));
}
foreach ($yamlMappingFiles as $file) {
$container->addResource(new FileResource($file));
}
foreach ($messageFiles as $file) {
$container->addResource(new FileResource($file));
}
if (isset($config['validation']['annotations']) && $config['validation']['annotations'] === true) {
$annotationLoader = new Definition($container->getParameter('validator.mapping.loader.annotation_loader.class'));
$container->setDefinition('validator.mapping.loader.annotation_loader', $annotationLoader);
$loader = $container->getDefinition('validator.mapping.loader.loader_chain');
$arguments = $loader->getArguments();
array_unshift($arguments[0], new Reference('validator.mapping.loader.annotation_loader'));
$loader->setArguments($arguments);
}
} elseif ($container->hasDefinition('validator')) {
$container->getDefinition('validator')->clearTags();
}
$this->registerValidationConfiguration($config, $container);
}
$this->addCompiledClasses($container, array(
@ -280,6 +208,83 @@ class WebExtension extends Extension
));
}
protected function registerValidationConfiguration($config, ContainerBuilder $container)
{
if ($config['validation']['enabled']) {
if (!$container->hasDefinition('validator')) {
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
$loader->load($this->resources['validation']);
}
$xmlMappingFiles = array();
$yamlMappingFiles = array();
$messageFiles = array();
// default entries by the framework
$xmlMappingFiles[] = __DIR__.'/../../../Components/Form/Resources/config/validation.xml';
$messageFiles[] = __DIR__ . '/../../../Components/Validator/Resources/i18n/messages.en.xml';
$messageFiles[] = __DIR__ . '/../../../Components/Form/Resources/i18n/messages.en.xml';
foreach ($container->getParameter('kernel.bundles') as $className) {
$tmp = dirname(str_replace('\\', '/', $className));
$namespace = str_replace('/', '\\', dirname($tmp));
$bundle = basename($tmp);
foreach ($container->getParameter('kernel.bundle_dirs') as $dir) {
if (file_exists($file = $dir.'/'.$bundle.'/Resources/config/validation.xml')) {
$xmlMappingFiles[] = realpath($file);
}
if (file_exists($file = $dir.'/'.$bundle.'/Resources/config/validation.yml')) {
$yamlMappingFiles[] = realpath($file);
}
// TODO do we really want the message files of all cultures?
foreach (glob($dir.'/'.$bundle.'/Resources/i18n/messages.*.xml') as $file) {
$messageFiles[] = realpath($file);
}
}
}
$xmlFilesLoader = new Definition(
$container->getParameter('validator.mapping.loader.xml_files_loader.class'),
array($xmlMappingFiles)
);
$yamlFilesLoader = new Definition(
$container->getParameter('validator.mapping.loader.yaml_files_loader.class'),
array($yamlMappingFiles)
);
$container->setDefinition('validator.mapping.loader.xml_files_loader', $xmlFilesLoader);
$container->setDefinition('validator.mapping.loader.yaml_files_loader', $yamlFilesLoader);
$container->setParameter('validator.message_interpolator.files', $messageFiles);
foreach ($xmlMappingFiles as $file) {
$container->addResource(new FileResource($file));
}
foreach ($yamlMappingFiles as $file) {
$container->addResource(new FileResource($file));
}
foreach ($messageFiles as $file) {
$container->addResource(new FileResource($file));
}
if (isset($config['validation']['annotations']) && $config['validation']['annotations'] === true) {
$annotationLoader = new Definition($container->getParameter('validator.mapping.loader.annotation_loader.class'));
$container->setDefinition('validator.mapping.loader.annotation_loader', $annotationLoader);
$loader = $container->getDefinition('validator.mapping.loader.loader_chain');
$arguments = $loader->getArguments();
array_unshift($arguments[0], new Reference('validator.mapping.loader.annotation_loader'));
$loader->setArguments($arguments);
}
} elseif ($container->hasDefinition('validator')) {
$container->getDefinition('validator')->clearTags();
}
}
protected function addCompiledClasses($container, array $classes)
{
$container->setParameter('kernel.compiled_classes', array_merge($container->getParameter('kernel.compiled_classes'), $classes));