今回はモデルからレコードのカラムをキーとする配列を取得する関数をご紹介します。
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();とかで呼べる。

コメント