今回はモデルからレコードのカラムをキーとする配列を取得する関数をご紹介します。
CakePHPでの開発で入力フォームを作ってると、モデルの値が渡ってなかったりして
NOTICEで「んな変数ねーよ!」って怒られたりする時がある。
NOTICEだから無視しても大丈夫といえば大丈夫だけど、
毎度毎度怒られるのはあまり気持ちがよくない。(バグの原因にもなるし)
Cake自体にモデルの空配列を一括で渡してくれるようなAPIがあるっしょ!
・・って思ったけど意外とないものである。
ということで作ったのがこいつ。
こいつをAppModelにぶち込んで完成。
/** * モデルの空配列を返します。 * @return array モデルの空配列 */ function getModelArray() { //モデルの名前を取得 $model = get_class($this); //カラムタイプの配列からキーのみを取得 $keys = array_keys($this->getColumnTypes()); //配列を空文字で埋める $arr[$model] = array_fill_keys($keys,''); return $arr; }
空文字じゃなくてFALSEでもいいし、0でもいいし、各自お好みで。
<仕組み>
ModelクラスのもつgetColumnTypes関数でテーブル上のカラムが
array(カラム名→データ型)という形で返ってくる。
そいつのキーを取り出して、array_fill_keys関数で一個一個に空文字を入れて完成。
仕上げにクラス名(AppModelを継承したModel名)を取得して、
配列をお決まりの形↓にする。
array('モデル名' => array('カラム名' => '','カラム名' => ''));
Controllerで使う時に$this->MyModel->getModelArray();とかで呼べる。
コメント