新しいヘルパー クラス (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 ) を見ましたが、この問題にはあまり適していません。 (少なくとも私はそうは思いません)。