2012-09-25 9 views
7

IはCodeIgniterのHMVCは、get_instanceを使用することはできないが、適切

/application/core/CMS_Controller.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

require APPPATH."third_party/MX/Controller.php"; 

class CMS_Controller extends MX_Controller { 

    public function __construct() { 
     parent::__construct(); 
    } 

    public function show_something() { 
     echo "something shown"; 
    } 
} 

Iは、モジュール内の別のコントローラを持っている/アプリケーションにおけるコントローラ/コアを有するMX_Controllerを拡張しますCMS_Controller

から延長(/modules/my_module/controllers/controller.php)

/modules/my_module/controllers/controller.php/modules/my_module/views/view.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
$ci =& get_instance(); 
echo $ci->show_something(); 
?> 

そして:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Controller extends CMS_Controller { 

    public function index() { 
     $this->load->view('view'); 
    } 
} 
そして、view.php(/modules/my_module/views/view.php)で、私はこれを行います私はこのエラーを取得する:

Fatal error: Call to undefined method CI::show_something() in /home/gofrendi/public_html/No-CMS/modules/my_module/views/view.php on line 3

それはなり作品、私はMX_Controllerを使用し、代わりにCI_Controllerを使用していない場合: /アプリケーション/ COR E/CMS_Controller.php

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

//require APPPATH."third_party/MX/Controller.php"; 

class CMS_Controller extends CI_Controller { 

    public function __construct() { 
     parent::__construct(); 
    } 

    public function show_something() { 
     echo "something shown"; 
    } 
} 

誰もがここで間違っているのか知っていますか?私にとって

答えて

3

/THIRD_PARTY/MX/Controller.php あなたが見れば、コンストラクタの最後で (54行の後に)私は

/* allow CI_Controller to reference MX_Controller */ 
CI::$APP->controller = $this; 

を追加しましたコード$これはMX_ControllerとCI ::の現在のクラスを参照しています。$ APPはCI_controllerを参照します(MX/Base.phpファイルを参照)

我々は(通常通り)

$this->CI =& get_instance(); 

を行いますと、私たちはあなたの答えのために

$this->CI =& get_instance()->controller; 
0

私の試みはこれだろうので、あなたがインスタンスを取得する必要はありません。代わりに

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 
$ci =& get_instance(); 
echo $ci->show_something(); 
?> 

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

echo $this->show_something(); 
?> 

はとにかく独自のライブラリを設定し、somenthingを行うには良い方法ですlike:

+0

感謝を行いますMX_Controllerへの参照を取得するためにCI_Controller への参照を取得する 。スクリプトがビューに表示されます。私はその見解が$ thisを認識できるとは思わない。今はまだ何か別のものがあります。しかし、私は結果を後で確かめるでしょう。 – goFrendiAsgard

1

私は同じ問題を抱えていましたが、そのポストが見つかりました。それは私のウェブサイトの仕事を作ってくれました。

"コントローラを別のコントローラで実行する予定がない限り、MX_Controllerを拡張する必要はありません。多くの場合、コードをライブラリに配置します。そうでなければ、コントローラはMY_Controllerを拡張するだけです。

ここで見つける:アプリケーションで http://ellislab.com/forums/viewthread/179478/

関連する問題