Skip to content

Commit

Permalink
Add mapping driver factory
Browse files Browse the repository at this point in the history
  • Loading branch information
Christian Schmidt committed Sep 7, 2015
1 parent 9677500 commit f1fbcdb
Showing 1 changed file with 43 additions and 37 deletions.
80 changes: 43 additions & 37 deletions src/Dflydev/Provider/DoctrineOrm/DoctrineOrmServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -146,50 +146,19 @@ public function register(Container $container)

$chain = $container['orm.mapping_driver_chain.locator']($name);

foreach ((array) $options['mappings'] as $entity) {
if (!is_array($entity)) {
foreach ((array) $options['mappings'] as $mappingOptions) {
if (!is_array($mappingOptions)) {
throw new \InvalidArgumentException(
"The 'orm.em.options' option 'mappings' should be an array of arrays."
);
}

if (isset($entity['alias'])) {
$config->addEntityNamespace($entity['alias'], $entity['namespace']);
if (isset($mappingOptions['alias'])) {
$config->addEntityNamespace($mappingOptions['alias'], $mappingOptions['namespace']);
}

switch ($entity['type']) {
case 'annotation':
$useSimpleAnnotationReader =
isset($entity['use_simple_annotation_reader'])
? $entity['use_simple_annotation_reader']
: true;
$driver = $config->newDefaultAnnotationDriver((array) $entity['path'], $useSimpleAnnotationReader);
$chain->addDriver($driver, $entity['namespace']);
break;
case 'yml':
$driver = new YamlDriver($entity['path']);
$chain->addDriver($driver, $entity['namespace']);
break;
case 'simple_yml':
$driver = new SimplifiedYamlDriver(array($entity['path'] => $entity['namespace']));
$chain->addDriver($driver, $entity['namespace']);
break;
case 'xml':
$driver = new XmlDriver($entity['path']);
$chain->addDriver($driver, $entity['namespace']);
break;
case 'simple_xml':
$driver = new SimplifiedXmlDriver(array($entity['path'] => $entity['namespace']));
$chain->addDriver($driver, $entity['namespace']);
break;
case 'php':
$driver = new StaticPHPDriver($entity['path']);
$chain->addDriver($driver, $entity['namespace']);
break;
default:
throw new \InvalidArgumentException(sprintf('"%s" is not a recognized driver', $entity['type']));
break;
}
$driver = $container['orm.mapping.factory']($mappingOptions['type'], $config, $mappingOptions);
$chain->addDriver($driver, $mappingOptions['namespace']);
}
$config->setMetadataDriverImpl($chain);

Expand All @@ -207,6 +176,43 @@ public function register(Container $container)
return $configs;
};

$container['orm.mapping.factory.annotation'] = $container->protect(function(Configuration $config, $mappingOptions) {
$useSimpleAnnotationReader =
isset($mappingOptions['use_simple_annotation_reader'])
? $mappingOptions['use_simple_annotation_reader']
: true;
return $config->newDefaultAnnotationDriver((array) $mappingOptions['path'], $useSimpleAnnotationReader);
});

$container['orm.mapping.factory.yml'] = $container->protect(function(Configuration $config, $mappingOptions) {
return new YamlDriver($mappingOptions['path']);
});

$container['orm.mapping.factory.simple_yml'] = $container->protect(function(Configuration $config, $mappingOptions) {
return new SimplifiedYamlDriver(array($mappingOptions['path'] => $mappingOptions['namespace']));
});

$container['orm.mapping.factory.xml'] = $container->protect(function(Configuration $config, $mappingOptions) {
return new XmlDriver($mappingOptions['path']);
});

$container['orm.mapping.factory.simple_xml'] = $container->protect(function(Configuration $config, $mappingOptions) {
return new YamlDriver($mappingOptions['path']);
});

$container['orm.mapping.factory.php'] = $container->protect(function(Configuration $config, $mappingOptions) {
return new YamlDriver($mappingOptions['path']);
});

$container['orm.mapping.factory'] = $container->protect(function ($driver, Configuration $config, $mappingOptions) use ($container) {
$mappingFactoryKey = 'orm.mapping.factory.'.$driver;
if (!isset($container[$mappingFactoryKey])) {
throw new \RuntimeException("Factory '$mappingFactoryKey' for mapping type '$driver' not defined");
}

return $container[$mappingFactoryKey]($config, $mappingOptions);
});

$container['orm.cache.configurer'] = $container->protect(function ($name, Configuration $config, $options) use ($container) {
$config->setMetadataCacheImpl($container['orm.cache.locator']($name, 'metadata', $options));
$config->setQueryCacheImpl($container['orm.cache.locator']($name, 'query', $options));
Expand Down

0 comments on commit f1fbcdb

Please sign in to comment.