0

新しいヘルパー クラス (classB) を使用する必要がある既存のコントローラー (classA) があります。通常、classBをライブラリに配置して実行します

$this->load->library('classb');
$this->classb->method();

ただし、コンストラクターが必要とする classB で const を定義しているときに問題が発生しました。

classB {
    const MYDEFINE = 1;
    ...
}

このアプローチの問題は、ライブラリをロードするまで MYDEFINE の定義を使用できないことですが、classB コンストラクターを送信する引数を使用して $params 配列を作成する必要があります。だから私は鶏と卵のケースを手に入れます

$params = array();
$params['open_mode'] = classB::MYDEFINE;
$instance = $this->load->library('classB', $params);

ライブラリを使用せずに、代わりに正常に動作している classA コントローラーで @include_once('classB') を使用することで、この問題を解決できました。そのため、ファイル classB.php は controllers ディレクトリに保存されます。

他の人がこの問題に遭遇したかどうか、またどのように解決したか (他の場所で const を decaaring する以外に) 疑問に思っています。別の方法に関するPhilSurgeon の投稿 ( http://philsturgeon.co.uk/blog/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY ) を見ましたが、この問題にはあまり適していません。 (少なくとも私はそうは思いません)。

4

2 に答える 2

0

のようなブートストラップライブラリを作成するのはどうですか

include 'path/to/class/b';

class Init_class_b Extends class_b
{
   function __construct($params)
   {
      // handle the variables here
      parent::__construct();
   }
}

それから:

$this->load->library('Init_class_b',$params_for_construct);

$this->Init_class_b->method()

于 2013-10-18T01:32:28.363 に答える