Example #1
0
 /**
  * Get class name mapped to collection
  * @param string $name name of collection
  * @param array $defaultDefinition definition used when no definition found for defined class
  * @return string|array name of class or array of class definition
  */
 private function getCollectionDefinition($name, array $defaultDefinition = null)
 {
     if (isset($this->mapping[$name])) {
         $classDefinition = $this->mapping[$name];
     } elseif ($this->regexpMapping) {
         foreach ($this->regexpMapping as $collectionNamePattern => $regexpMappingClassDefinition) {
             if (preg_match($collectionNamePattern, $name, $matches)) {
                 $classDefinition = $regexpMappingClassDefinition;
                 $classDefinition->setOption('regexp', $matches);
                 break;
             }
         }
     }
     // mapping not configured - use default
     if (!isset($classDefinition)) {
         $classDefinition = new Definition();
         if ($this->collectionNamespace) {
             $class = $this->collectionNamespace . '\\' . implode('\\', array_map('ucfirst', explode('.', $name)));
             $classDefinition->setCollectionClass($class);
         } elseif ($defaultDefinition) {
             $classDefinition->merge($defaultDefinition);
         }
     }
     // check if class exists
     if (!class_exists($classDefinition->getCollectionClass())) {
         throw new Exception('Class ' . $classDefinition->getCollectionClass() . ' not found while map collection name to class');
     }
     return $classDefinition;
 }