データベースからデータをもってきて、フォームに埋める。その値を編集し、形式をチェックしてデータベースに書き込む。
とってもよくあると思う。でも、、、
CodeIgniterでは形式チェックをform_validationクラスを使って行う。あらかじめformデータに値を入れていたいときには、set_value(‘フィールド名’,’デフォルト値’)を使うことになっている。
ところが、この関数、set_rulesしたフィールドについては値がブランクで、’デフォルト値’を入れてくれない。
コードを見ると、ruleなりでフィールド名があったら、内部配列から値を取るようになっている。まったく新しいデータを入れるときはそれでいいだろうけれども、すでにあるデータを編集する時には向かないように思う。
仕方ないのでViewの中で次のような関数を作った。
function _set_text($name,$size,$maxlength,$db){
if ( array_key_exists($name,$_POST) ){
//ある
$value = set_value($name);
}else{
//ない
$value = $db[$name];
}
echo form_input( array(
‘name’=> $name,
‘size’=> $size,
‘maxlength’ => $maxlength,
‘value’ => set_value($name, $db[$name] )
) );
}
}
これで値がポストされていないならば、データベースからもってくる、にしたのだが。。。
さて、ひととおりCodeIgniterで書いてみたのだが、やっぱり使いやすい。CakePHPも使ってみたが、制約がきつすぎる。確かにCodeIgniterを使っていても、データベースのフィールド名、フォームのフィールド名などを統一しておいたほうが、なにかとコードは簡単になる。でも、それをフレームワークとして強制されるとなると大分とメンドウだ。
Cakeの場合だが、テーブルごとにmodelを作らねばならず、joinはSQL文だけの問題にならない。オブジェトとして扱う場合やりにくくて仕方がない。さらに、各テーブル名は複数名詞でなければならず、データベースレコードはすべからくidフィールド、createdを持つべきである、といったことで、ますます書きづらくなっていく。CodeIgniterは評論家からは、Modelが弱いといわれているらしい。おそらくこのあたりの自由度の高さを見ないで「なにが揃っているか」と機能をリストすると×がつきまくるのだろう。でも、書きやすさはそういう機能リストからは決してわからないと思う。
この間も書いた<?=$hogehoge?>をPHP自体は敬遠しているが、CodeIgniterではフレームワークでサポートしてくれている。このおかげでEchoの嵐とHTMLに変数を入れたいだけなのにsmartyを使うなんていうメンドウくさいことをしなくてよい。CodeIgniterは実を取った設計といえる。
あと、なによりも大事なのは、へっぽこプログラマーの俺でも数週間、仕事の合間にいじってるだけで習得できたことだ。これは大きいと思うけどなぁ。。。
なしでMVCモデル作ろうとしたら、大変なんだけどね。学習したら圧倒的な生産性を誇れるんだけど。
CodeIgniterの開発チームは今、2.0で大忙しらしい。バージョンがあがってもスリムなフレームワークであることを祈る。