Codeigniter3.xでユーザー独自クラスを作成して利用するには?
サンプル用コントローラーの中で、private functionで定義
した各種ユーザー専用チェック関数をライブラリとして
外出しするにはどうするか調べてみた。
結論として独自クラスを、application/librariesの下に配置
して、呼びたいコントローラーのコンストラクタで、
「$this->load->library('defined_class');」みたいな感じで
読み込むっぽい。命名規約とloadする時の大文字小文字には
十分注意しないと大混乱するやつだな、これ。
ユーザーガイドを見ると、オブジェクト指向の書き方に則って
とか書いてあるけど、PHP7.3.xの書き方にも則らないといけない
よね、多分これは...(Φω|
とりあえず、従来の参照渡しの実装でいけた。
(今後、置換え対応は必要かも)
大雑把にまとめたので、もう少し中身を書いて実験しながら
得られた結果をあとでまとめておかないとな...
[手順]
1. コントローラーから外出しする関数(method)をまとめて、
application/libraries/ に配置。
2. 命名規約
2-1. ファイル名の1文字目は大文字。
2-2. クラス宣言の1文字目は大文字。
2-3. クラス名とファイル名が一致。
(ex)class Mylib だった場合は、ファイル名「Mylib.php」
3. コントローラーから1,2で定義した独自クラスを利用。
(ex)コンストラクタで、手動で独自クラスを読込。
$this->load->library('mylib');
クラス名とファイル名は1文字目が大文字だが、
コントローラーから読込む場合は、小文字で設定。
(ex)autoload.phpで定義して自動読込
$autoload['libraries'] = array('mylib');
4. ライブラリの初期化時に引数を与えたい場合は、ライブラリの
コンストラクタに引数を追加して対応。
4-1. ロードされるライブラリ側ではコンストラクタで引数を受取る。
(ex)パラメータを定義して設定
$params = array('type' => 'large', 'color' => 'red');
or
$params = ['type' => 'large', 'color' => 'red'];
$this->load->library('mylib', $params);
5. ライブラリ内でCodeIgniterのリソースを利用。
※ユーザー定義ライブラリから設定ファイルやシステムライブラリを
使用したい場合等。
(ex)プロパティとして使う変数を定義。
protected $CI;
$this->CI =& get_instance();
(ex)コンストラクタで設定ファイルを読込。
$this->CI->config->load('custom', TRUE);
7. 関数から呼び出しているメソッドは「$this->method_name()」で
取得可能。
(ex)check_form()からcheck_string()を呼び出す
public function check_form() {
if($this->check_string($hoge) !== FALSE) {
}
}
※尚、独自ライブラリで既存ネイティブライブラリの置換も可能。
※ネイティブライブラリを継承し処理を実装することも可能。
[参考サイト]