2011-12-08 2 views
3

저는 PHP 프레임 워크 Yii를 사용하고 있습니다.하위 디렉토리에있는 모델 가져 오기 Yii

내가 사용하는 경우 : "

  • "/models/subdir1/model1.php "
  • : yii::import('application.models.*');는 모델 폴더의 모든 모델을 가져옵니다,하지만 난 하위 디렉토리에 몇 가지 모델을 가지고 /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 up -r2452 /path/to/YiiBase.php로 개정판을 얻을 수 있습니다 다른 옵션은 svn export -r2452 http://code.google. co.kr /..../ YiiBase.php를 열고 index.php의 첫 번째 줄에 해당 파일이 필요하면 기본 파일이어야합니다. 참고 : 리비전을 혼합 할 때주의하십시오. 나는 제안하지 않을 것입니다. – schmunk

+0

이 개정판을 받았고 적용했습니다. 모든 것이 잘 작동합니다. – Youcef04

0

당신이

따라가에있는 클래스 YII의 내용을 확장 할 수 원하는 경우 지금과 까지 Yii2이에서 찾을 수 없습니다 (/vendor/yiisoft/yii2/Yii.php) 클래스 Yii 함수에 추가합니다. public static load ($ path) 및 정적 함수 listFolderFiles ($ dir)입니다. :

다음 예를 코드에 사용하십시오!

Yii :: load ('models. *'); -이 부하 하위 디렉토리에서 디렉토리 모델에있는 모든 파일과 모든 파일

YII :: 부하 ([ '. 모델 *', '. 구성 요소 *']); - 모델 및 구성 요소의 모든 파일을 하위 디렉토리에있는 파일로로드합니다.

Yii :: load ([ 'models. *', 'components.yourClassFileName']); -이 부하 모든 모델에서 파일 (파일 서브 디렉토리) 및 콘텐츠와 구성 요소

공공 정적 기능로드 ($ 경로 = 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 ($ 말 일세) 내용 :

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