Show
Ignore:
Timestamp:
12/07/07 11:06:55 (13 months ago)
Author:
wernerm
Message:

Changed loadModels() once again. Removed loading of models based solely on model filename. Added support for different models with the same file names. All models files are required, in order to determine class names. The changes result in an overall increase in flexibility with respect to model file names.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/lib/Doctrine.php

    r3311 r3318  
    519519                    $e = explode('.', $file->getFileName()); 
    520520                    if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false) { 
    521                         self::$_loadedModelFiles[$e[0]] = $file->getPathName(); 
     521                        self::$_loadedModelFiles[] = array( 
     522                            'filename' => $e[0], 
     523                            'filepath' => $file->getPathName() 
     524                        ); 
    522525                    } 
    523526                } 
     
    526529            $loadedModels = array(); 
    527530 
    528             $modelFiles = array_keys(self::$_loadedModelFiles); 
    529  
    530             foreach ($modelFiles as $name) { 
     531            $modelFiles = self::$_loadedModelFiles; 
     532 
     533            foreach ($modelFiles as $key => $model) { 
    531534                $declaredBefore = get_declared_classes(); 
    532                 if (class_exists($name)) { 
    533                     if (self::isValidModelClass($name) && !in_array($name, $loadedModels)) { 
    534                         $loadedModels[] = $name; 
    535                     } 
    536                 } else { 
    537                     // Determine class names by the actual inclusion of the model file 
    538                     // The possibility exists that the class name(s) contained in the model 
    539                     // file is not the same as the actual model file name itself 
    540                     if (isset(self::$_loadedModelFiles[$name])) { 
    541                         require_once self::$_loadedModelFiles[$name]; 
    542                         $declaredAfter = get_declared_classes(); 
    543                         // Using array_slice since array_diff is broken is some versions 
    544                         $foundClasses = array_slice($declaredAfter, count($declaredBefore) - 1); 
    545                         if ($foundClasses) { 
    546                             foreach ($foundClasses as $name) { 
    547                                 if (self::isValidModelClass($name) && !in_array($name, $loadedModels)) { 
    548                                     $loadedModels[] = $name; 
    549                                 } 
    550                             } 
     535                require_once $model['filepath']; 
     536                $declaredAfter = get_declared_classes(); 
     537                // Using array_slice because array_diff is broken is some PHP versions 
     538                $foundClasses = array_slice($declaredAfter, count($declaredBefore) - 1); 
     539                if ($foundClasses) { 
     540                    foreach ($foundClasses as $className) { 
     541                        if (self::isValidModelClass($className) && !in_array($className, $loadedModels)) { 
     542                            $loadedModels[] = $className; 
    551543                        } 
    552544                    } 
    553545                } 
     546 
    554547            } 
    555548        } 
     
    575568            $classes = array_merge($classes, array_keys(self::$_loadedModelFiles)); 
    576569        } 
    577  
    578570        return self::filterInvalidModels($classes); 
    579571    }