导入子目录中的模型Yii

时间:2011-12-08 17:58:50

标签: php yii

我正在使用php框架Yii。

当我使用:yii::import('application.models.*');时,模型文件夹中的所有模型都将被导入,但我在子目录中有一些模型:

  • “/模型/ subdir1 / model1.php”
  • “/模型/ subdir1 / subsubdir2 / model2.php”
  • “/模型/ subdir1 / subsubdir2 / model3.php”
  • “/模型/ subdir1 / subsubdir2 / subsubsubdir3 / model4.php”

有很多级别(3,4或5),我想使用以下方法导入所有这些模型:yii::import('application.models.subdir1.*');

有没有解决办法?

并提前致谢。

2 个答案:

答案 0 :(得分:4)

虽然我无法在指南中找到它,但应该可以使用

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

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

[编辑]很抱歉,没有看完整页,看起来它已被还原,但你仍然可以得到一个特定的版本来获取代码,但qiang不推荐。

答案 1 :(得分:0)

到目前为止我在Yii2找不到 如果你想要,你可以按照

扩展它所在的类Yii的内容(/vendor/yiisoft/yii2/Yii.php)并添加类Yii函数 公共静态加载($ path)和 静态函数listFolderFiles($ dir)。 :

在代码中使用这些示例!

的Yii ::负载('模型*'。); - 这会加载目录模型中的所有文件和子目录中的所有文件

Yii :: load([' models。*',' components。*']); - 这会加载模型和组件中的所有文件以及子目录中的文件

的Yii ::负载(['模型*'' components.yourClassFileName']); - 这会加载模型中的所有文件(以及子目录中的文件)和组件中的一个文件

公共静态函数load($ 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;
            }
        }
    }