Импорт моделей в подкаталогах Yii - PullRequest
3 голосов
/ 08 декабря 2011

Я использую php framework 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.*');

Есть ли какое-либо решение для этого ??

и заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

Хотя я не могу найти его в руководстве, он должен быть доступен с

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

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

[edit] Извините, не прочитал всю страницу, похоже, что она была перевернута, но вы все равно можете получить конкретную ревизию для получения кода, но это не рекомендуется qiang.

0 голосов
/ 13 ноября 2015

не могу найти в 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;
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...