private function startORMConfiguration(array $config = array())
{
$configClass = $config['configurationClass'];
$configuration = new $configClass();
$configuration = new \Doctrine\ORM\Configuration();
// Entity Namespaces configuration
foreach ($config['entityNamespaces'] as $alias => $namespace) {
$configuration->addEntityNamespace($alias, $namespace);
}
// Proxy configuration
$configuration->setAutoGenerateProxyClasses($config['proxy']['autoGenerateClasses'] === true || !in_array($config['proxy']['autoGenerateClasses'], array("0", "false", false)));
$configuration->setProxyNamespace($config['proxy']['namespace']);
$configuration->setProxyDir($config['proxy']['dir']);
// Cache configuration
$configuration->setMetadataCacheImpl($this->getCacheInstance($config['metadataCache']));
$configuration->setResultCacheImpl($this->getCacheInstance($config['resultCache']));
$configuration->setQueryCacheImpl($this->getCacheInstance($config['queryCache']));
// SecondLevelCache configuration
if (isset($config['secondLevelCache']) && method_exists($configuration, 'setSecondLevelCacheEnabled')) {
$configuration->setSecondLevelCacheEnabled($config['secondLevelCache']['enabled'] === true || !in_array($config['secondLevelCache']['enabled'], array("0", "false", false)));
if ($configuration->isSecondLevelCacheEnabled()) {
$regionsConfigurationClass = $config['secondLevelCache']['regionsConfigurationClass'];
$factoryClass = $config['secondLevelCache']['cacheFactoryClass'];
$factory = new $factoryClass(new $regionsConfigurationClass(), $this->getCacheInstance($config['secondLevelCache']['cache']));
$configuration->getSecondLevelCacheConfiguration()->setCacheFactory($factory);
if (isset($config['secondLevelCache']['loggerClass'])) {
$loggerClass = $config['secondLevelCache']['loggerClass'];
$configuration->getSecondLevelCacheConfiguration()->setCacheLogger(new $loggerClass());
}
}
}
// Metadata configuration
$configuration->setMetadataDriverImpl($this->startORMMetadata($config['metadataDrivers']));
//Filters http://doctrine-orm.readthedocs.org/en/latest/reference/filters.html#configuration
if (isset($config['filters'])) {
foreach ($config['filters'] as $name => $className) {
$configuration->addFilter($name, $className);
}
}
// DQL Functions configuration
$dqlFunctions = $config['DQLFunctions'];
foreach ($dqlFunctions['datetime'] as $name => $className) {
$configuration->addCustomDatetimeFunction($name, $className);
}
foreach ($dqlFunctions['numeric'] as $name => $className) {
$configuration->addCustomNumericFunction($name, $className);
}
foreach ($dqlFunctions['string'] as $name => $className) {
$configuration->addCustomStringFunction($name, $className);
}
// Repository Class configuration
if (isset($config['defaultRepositoryClass'])) {
$configuration->setDefaultRepositoryClassName($config['defaultRepositoryClass']);
}
// Naming strategy for ORM
$configuration->setNamingStrategy(new $config['namingStrategyClass']());
return $configuration;
}