2011-08-01 5 views
3
<?php 
class Home extends CI_Controller 
{ 
    public function __construct() 
    { 
     // load libraries // 
     $this->load->library('session'); 
     $this->load->library('database'); 
     $this->load->library('captcha'); 

     // alternative 
     $this->load->library(array('session', 'database', 'captcha')); 

     // load models // 
     $this->load->model('menu_model', 'mmodel'); 
     $this->load->model('user_model', 'umodel'); 
     $this->load->model('admin_model', 'amodel'); 

     // alternative 
     $this->load->model(array(?)); 
    } 
} 
?> 

すべてのモデルを配列でロードするにはどうすればよいですか?出来ますか?配列内の複数のモデルをロードする - codeigniterフレームワーク

答えて

5

モデルでは、あなたがこれを行うことができます:

$models = array(
    'menu_model' => 'mmodel', 
    'user_model' => 'umodel', 
    'admin_model' => 'amodel', 
); 

foreach ($models as $file => $object_name) 
{ 
    $this->load->model($file, $object_name); 
} 

でも述べたように、あなたはファイルapplication/core/MY_Loader.phpを作成し、ロードモデル用に独自のメソッドを書くことができます。 「あなたはまた、別のDB接続が配列で渡すことができる可能性があり

$this->load->model($models); 

が、その後あなた:上から私たちの変数と

class MY_Loader extends CI_Loader { 

    function model($model, $name = '', $db_conn = FALSE) 
    { 
     if (is_array($model)) 
     { 
      foreach ($model as $file => $object_name) 
      { 
       // Linear array was passed, be backwards compatible. 
       // CI already allows loading models as arrays, but does 
       // not accept the model name param, just the file name 
       if (! is_string($file)) 
       { 
        $file = $object_name; 
        $object_name = NULL; 
       } 
       parent::model($file, $object_name); 
      } 
      return; 
     } 

     // Call the default method otherwise 
     parent::model($model, $name, $db_conn); 
    } 
} 

使用法:私は(テストしていない)、これはうまくいくかもしれないと思いますdは多次元配列を持つ必要があり、単純なものではありません。それはあまりにも頻繁にあなたはそれをとにかくする必要があります。

+0

私は2つを組み合わせると 'モデル()'メソッドを作ることになります単純に配列を反復し、それぞれに対して 'model()'を呼び出します。 – AlienWebguy

+0

なぜ新しい方法を作るのですか?これは、既存のものには何ら影響しません。個人的には、最初にモデルをロードするために配列を使用しないでください。ループを使用するだけです。実際には、すでに完了しているファイル名の配列を渡すだけで、別名のオブジェクト名を使用するのは好きではありません。 –

+0

彼らは '$ this-> model($ babe)'をシステムファイルの変数名として使います。 :D –

0

ネイティブではありませんが、簡単にそのロジックをサポートするようにLoader->model()を拡張できます。

1

私はCodeIgniterの2.xの程度が、CodeIgniterの3.xの内の任意のアイデアを持っていない、これも動作しますします:

$models = array(
    'menu_model' => 'mmodel', 
    'user_model' => 'umodel', 
    'admin_model' => 'amodel', 
); 
$this->load->model($models); 
関連する問題