2016-05-16 77 views
0

我不想寫一個基於文件夾模型中的文件自動載入:)模型的函數。所以應用程序必須掃描文件夾中的文件,grep所有.php文件,刪除。和..「文件夾」,將它們放置在autoload['model'] = arrayCodeigniter自動自動載入模型

這是autoload.php文件

$dir = './application/models'; 
$files = scandir($dir); 
unset($files[0]); 
unset($files[1]); 
$mods = ''; 
foreach ($files as $f){ 
    if(glob('*.php')){ 
     $mods .= str_replace('.php','',"'".$f."',"); 
    } 
} 
$autoload['model'] = $mods; 

我當前的代碼而且我不斷收到這樣的錯誤

An uncaught Exception was encountered 

Type: RuntimeException 

Message: Unable to locate the model you have specified: 'admins','categories','companies','countries' 
Filename: D:\wamp64\www\myapp\public_html\rest\system\core\Loader.php 

Line Number: 344 

它看起來像問題是當我將數組傳遞給$ autoload變量時,它將威脅整個數組作爲一個模型。你們能幫我解決我的問題嗎?

+1

如果選中整個'APPPATH。 'config/autoload.php'文件,你將會把它寫上。也請在[docs](https://codeigniter.com/userguide3/)中查看[本頁](https://codeigniter.com/userguide3/general/models.html#auto-loading-models)。我的建議是充分閱讀文檔,至少一次。 – Tpojka

+0

編輯,現在我看到你想把這個功能放在135行之前。 – Tpojka

回答

1

我會去是這樣的:


/application/config/autoload.php

autoload['model'] = array('autoload_models'); 

/application/models/Autoload_models_model.php

class Autoload_models_model extends CI_Model { 

    public function __construct(){ 

     parent::__construct(); 

     // Scan directory where this (Autoload_models_model.php) file is located 
     $model_files = scandir(__DIR__); 

     foreach($model_files as $file){ 
      // Make sure we are not reloading autoload_models_model 
      // Make sure we have a PHP file 
      if(
       strtolower(explode('.', $file)[0]) !== strtolower(__CLASS__) && 
       strtolower(explode('.', $file)[1]) === 'php') 
      { 
       $this->load->model(strtolower($file)); 
      } 
     } 
    } 
} 
1

這是爲我工作的解決方案。如果您發現任何短或更好的代碼,請讓我知道

$dir = './application/models'; 
$files = scandir($dir); 
$models = array(); 
foreach ($files as $f){ 
    $file_parts = pathinfo($f); 
    $file_parts['extension']; 
    $correct_extension = Array('php'); 
    if(in_array($file_parts['extension'], $correct_extension)){ 
     array_push($models, str_replace('.php','',$f)); 
    } 
} 
$autoload['model'] = $models;