Show
Ignore:
Timestamp:
12/19/07 22:41:11 (13 months ago)
Author:
jwage
Message:

Refactorings for schema files and Doctrine_Record builder. More to come but got held up on some things that zYne- must fix first.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/lib/Doctrine.php

    r3319 r3415  
    193193    const ATTR_QUERY_CACHE_LIFESPAN     = 158; 
    194194    const ATTR_AUTOLOAD_TABLE_CLASSES   = 160; 
     195    const ATTR_MODEL_LOADING            = 161; 
    195196 
    196197    /** 
     
    427428 
    428429    /** 
     430     * MODEL_LOADING_AGRESSIVE 
     431     * 
     432     * Constant for agressive model loading 
     433     * Will require_once() all found model files 
     434     */ 
     435    const MODEL_LOADING_AGRESSIVE   = 1; 
     436 
     437    /** 
     438     * MODEL_LOADING_CONSERVATIVE 
     439     * 
     440     * Constant for conservative model loading 
     441     * Will not require_once() found model files inititally instead it will build an array 
     442     * and reference it in autoload() when a class is needed it will require_once() it 
     443     */ 
     444    const MODEL_LOADING_CONSERVATIVE= 2; 
     445     
     446    /** 
    429447     * Path 
    430448     * 
     
    506524     * 
    507525     * @param string $directory    Path to directory of models or array of directory paths 
     526     * @param bool   $aggressive   Bool true/false for whether to load models aggressively. 
     527     *                             If true it will require_once() all found .php files 
    508528     * @return array $loadedModels 
    509529     */ 
    510     public static function loadModels($directory) 
    511     { 
     530    public static function loadModels($directory, $agressive = true) 
     531    { 
     532        $loadedModels = array(); 
     533         
    512534        if ($directory !== null) { 
    513535            $manager = Doctrine_Manager::getInstance(); 
    514  
     536             
    515537            foreach ((array) $directory as $dir) { 
    516538                $it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir), 
     
    519541                    $e = explode('.', $file->getFileName()); 
    520542                    if (end($e) === 'php' && strpos($file->getFileName(), '.inc') === false) { 
    521                         self::$_loadedModelFiles[] = array( 
    522                             'filename' => $e[0], 
    523                             'filepath' => $file->getPathName() 
    524                         ); 
     543                         
     544                        if ($manager->getAttribute(Doctrine::ATTR_MODEL_LOADING) == Doctrine::MODEL_LOADING_CONSERVATIVE) { 
     545                            self::$_loadedModelFiles[$e[0]] = $file->getPathName(); 
     546                            $loadedModels[] = $e[0]; 
     547                        } else { 
     548                            $declaredBefore = get_declared_classes(); 
     549                            require_once($file->getPathName()); 
     550                             
     551                            $declaredAfter = get_declared_classes(); 
     552                            // Using array_slice because array_diff is broken is some PHP versions 
     553                            $foundClasses = array_slice($declaredAfter, count($declaredBefore) - 1); 
     554                            if ($foundClasses) { 
     555                                foreach ($foundClasses as $className) { 
     556                                    if (self::isValidModelClass($className) && !in_array($className, $loadedModels)) { 
     557                                        $loadedModels[] = $className; 
     558                                    } 
     559                                } 
     560                            } 
     561                        } 
    525562                    } 
    526563                } 
    527564            } 
    528  
    529             $loadedModels = array(); 
    530  
    531             $modelFiles = self::$_loadedModelFiles; 
    532  
    533             foreach ($modelFiles as $key => $model) { 
    534                 $declaredBefore = get_declared_classes(); 
    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; 
    543                         } 
    544                     } 
    545                 } 
    546  
    547             } 
    548565        } 
    549566 
     
    568585            $classes = array_merge($classes, array_keys(self::$_loadedModelFiles)); 
    569586        } 
     587 
    570588        return self::filterInvalidModels($classes); 
    571589    }