CI_Modelを拡張したMY_Modelの拡張
Modelを拡張したかったので、
Model Library for CodeIgniterを参考にして、やってみた。
最初は/application/models/basemodel.php
をつくりそこで
class BaseMode extends CI_Model{ }
をつくって、UserというModelから継承してみたところ、
class BaseMode not foundで怒られた。
/application/models/users.php
class Users extends BaseModel{ }
一時間はまる。
分かったのは次の二点
1. coreの拡張はapplication/coreに置く
2. coreの拡張クラスの名前はapplication/config/config/php
の$config['subclass_prefix'] = 'MY_';の規則に沿わす。
上の二点を取り入れれば、コードはうごいたんだけど、
さらなる警告がでた。
A PHP Error was encountered
Severity: Warning
Message: Missing argument 1 for My_Model::__construct(), called in C:\Users\xxx\project\system\core\Common.php on line 174 and defined
Filename: core/my_model.php
Line Number: 7
これは、Common.php の 174line を見てみると
$_classes[$class] = new $name();
としていて、引数を渡せるつくりになっていない。
だから、MY_Modelのほうでconstructor引数をディフォルト引数に
してやることで解決できた。
参考にしたのは、
http://stackoverflow.com/questions/2173525/code-igniter-passing-variable-to-controller-using-url-error
さらに!!!
My_Modelを拡張したものをUsersから使おうとしたら
class not foundエラー!!
class My_Model extends CI_Model { } class Users extends My_IDModel { }
この問題は、MY_ID_Modelが読み込まれている時に
My_Modelがまだ読み込まれてなくて、My_ID_Modelがundefined的な
状態になっている為(推測)
これを治すのに、requireを入れる
My_IDModelは私(My_Model)をrequire必要としてますよ。
<?php class My_Model extends CI_Model { } require(APPPATH.'core/My_IDModel.php'); ?>