2011-12-08 54 views
3

我正在使用php框架Yii。在子目錄中導入模型Yii

當我使用:yii::import('application.models.*');,在模型文件夾中的所有車型將進口的,但我在子目錄某些型號:

  • 「/models/subdir1/model1.php」
  • 「 /models/subdir1/subsubdir2/model2.php」
  • 「/models/subdir1/subsubdir2/model3.php」
  • 「/models/subdir1/subsubdir2/subsubsubdir3/model4.php」

有很多級別(3,4或5),我想導入所有這些模型使用:yii::import('application.models.subdir1.*');

是否有任何解決方案做到這一點?

並提前致謝。

+0

最好的方法是使用命名空間。 – Oleg

+1

命名空間需要php 5.3.0或更高版本,我使用的是5.2.5。 – Youcef04

+0

你不會在你的文章中提到這一點。爲什麼不使用5.3? :) – Oleg

回答

4

雖然我不能在指南中找到它,就可以將其與

yii::import('application.models.subdir1.**'); 

http://code.google.com/p/yii/issues/detail?id=1568

[編輯]很抱歉,沒看過完整的頁面,看起來就像是恢復,但你仍然可以得到一個特定的版本來獲取代碼,但這不是qiang推薦的。

+0

非常感謝schmunk,它運行良好,但我怎麼能得到這個修訂,可能是我應用這些更改:http://code.google.com/p/yii/source/detail?r=2452 ?? – Youcef04

+0

如果你真的想用這一點 - 因爲它迴歸了,你可以通過SVN得到修訂了-r2452 /path/to/YiiBase.php 另一種辦法是使用svn出口-r2452 http://code.google。 com /..../ YiiBase.php並在index.php的第一行中要求該文件,那麼它應該是首選文件。 注:小心混合修訂,我不會建議它。 – schmunk

+0

我得到了這個修訂,我應用了它,一切正常。 – Youcef04

0

我不能在這個Yii2直到找到現在 如果你願意,你可以做跟隨

擴展類的Yii它位於的內容(/vendor/yiisoft/yii2/Yii.php)並添加類Yii功能 public static load($ path)和 static function listFolderFiles($ dir)。 :

在您的代碼中使用這些示例! Yii :: load('models。*');();}};}}}}}} - 這加載目錄模型中的所有文件和子目錄中的所有文件

Yii :: load(['models。*','components。*']); - 這加載模型和組件中的所有文件也在子目錄中的文件

Yii :: load(['models。*','components.yourClassFileName']); - 這種負荷模型中的所有文件(和文件子目錄),並與內容組件

公共靜態功能負荷($ PATH = NULL)一個文件:

if($path != null){ 
     $root = self::getAlias('@webroot'); 
     if(is_array($path)){ 
      foreach($path as $p){ 
       $p = str_replace('/', '\\', $root).'/'.str_replace('.','/',$p); 
       if(substr($p, -2) == '/*'){ 
        $dir = substr($p, 0, -2); 
        self::listFolderFiles($dir); 
       } else { 
        require substr($p, 0, -1).'.php'; 
       } 
      } 
     } 

     if(is_string($path)){ 

      $path = str_replace('/', '\\', $root).'/'.str_replace('.','/',$path); 

      if(substr($p, -2) == '/*'){ 
       $dir = substr($p, 0, -2); 
       self::listFolderFiles($dir); 
      } else { 
       require $path.'.php'; 
      } 
     } 
    } 

靜態函數listFolderFiles($ DIR)內容:

$ffs = scandir($dir); 
    foreach($ffs as $ff){ 
     if($ff != '.' && $ff != '..'){ 
      if(is_dir($dir.'/'.$ff)) { 
       self::listFolderFiles($dir.'/'.$ff); 
      } else { 
       require $dir.'/'.$ff; 
      } 
     } 
    }