2011-07-12 8 views
2

私はcodeigniterアプリケーションで 'render'という名前のライブラリを自動読み込みしています。 ライブラリの完全なコードは次のとおりです。codeigniterでエラーが発生する

 
class Render extends CI_Controller { 
    public function template($template, $view, $extra_css, $extra_js) { 
     $data = array(); 
     if (isset($view)) { 
      $data['view'] = $view; 
     } 
     if (isset($extra_css)) { 
      $data['extra_css'] = $extra_css; 
     } 
     if (isset($extra_js)) { 
      $data['extra_js'] = $extra_js; 
     } 
     $template = $this->load->view("templates/$template", $data, TRUE); 
     echo $template; 
    } 

} 

このライブラリは正常に動作しますが、問題は、私は手動または自動ロードファイルを編集して、このライブラリをロードするたびに私は私のいずれかのいずれかのモデルをロードするとき、私はエラーを取得するということですコントローラ。ここ

 
A PHP Error was encountered 

Severity: Notice 

Message: Undefined property: Home::$my_model_name 

Filename: controllers/home.php 

Line Number: 11 

行番号10と11は以下のとおりです。

 
$this->load->model('my_model_name'); 
$this->my_model_name->my_model_method(); 

と私はまた、使用してみました:

 
$this->load->model('my_model_name', 'My_model'); 
$this->My_model->my_model_method(); 

マイコントローラ "ホーム" のコードは次のとおりです。

 
class Home extends CI_Controller { 
    function __construct() { 
     parent::__construct(); 
    } 
    public function index() 
    { 
     $this->load->model('my_model_name'); 
     $this->my_model_name->index(); 
    } 
} 

私はライブラリ__construct()メソッドを追加しようとしましたbまだ運がない。

class Render extends CI_Controller 

ライブラリを作成していないが、コントローラを行うことにより

+0

controllers/home.phpからコードを投稿できますか? –

+0

@Ahmed Nuaman:確かに、私は投稿を編集しました。もう一度チェックしてください。 –

+0

'Render'ライブラリをロードしようとしている場所が表示されません...モデル' my_model_name'でロードしようとしていますか? – jondavidjohn

答えて

6

!ライブラリを作成するには、クラスを作成してライブラリフォルダに配置するだけです。

ライブラリ内で、CIのローダを使用してモデルをロードする場合は、たとえば、メインCIクラスをインスタンス化する必要があります。

$CI = & get_instance(); 

(ファイルapplication/libraries/render.php)のようなもの:

class Render { 

     var $CI; 

     function __construct() 
     { 
     $this->CI = &get_instance(); 
     } 

     public function template($template, $view, $extra_css, $extra_js) { 
     $data = array(); 
     if (isset($view)) { 
      $data['view'] = $view; 
     } 
     if (isset($extra_css)) { 
      $data['extra_css'] = $extra_css; 
     } 
     if (isset($extra_js)) { 
      $data['extra_js'] = $extra_js; 
     } 
     $template = $this->CI->load->view("templates/$template", $data, TRUE); 
     return $template; 
    } 
} 

その後、あなたはあなたのライブラリ内の望むすべて、モデル、他のライブラリ、何でも$CI->loadすることができます。
詳細な説明は、Utilize CI resource within your libraryを参照してください。あなたのライブラリーを通常の方法で呼び出すと、$this->load->library('render')、次に$this->render->whatever();

+1

大きな助けをいただきありがとうございます。私は多くの時間を節約しました。私はこの問題の解決策を見つけ出すために徹夜で眠らせませんでしたが、あなたは100万のおかげでstackoverflowでうまくやっていました。 –

関連する問題