2016-05-16 84 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;