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');
?>