最近寒い。温暖化が足りないんじゃないのか。
CakePHP1.2ではバリデーションの方法が変わったよ!っていう情報が氾濫していたのでどうしたらいいのか、以前のやり方はどうなのかと悩んでいました。
どうやら
‘フィールド’=>array(‘rule’ => array(‘定義済み関数か自分で作った関数’), ‘message’ => ‘エラー時のメッセージ’)
って書くっぽいです。もっと複雑な指定もできるみたいだけど、とりあえず使わないから調べてない。
ただ巷の情報を見ていると「定義済みの関数」にVALID_EMAILに相当しそうな’email’やら、日付をチェックできそうな’date’はあるんですがVALID_NOT_EMPTYとかに相当するものがない。どうするんだ、自分で作るのか、と思っていたらそのままVALID_NOT_EMPTYも使えるっぽい。
var $validate = array(
'mail' => array('rule' => array('email'), 'message' => '正しいメールドレスを入力してください。'),
'name' => array('rule' => VALID_NOT_EMPTY, 'message' => '名前を入力してください。'),
'pass' => array('rule' => VALID_NOT_EMPTY, 'message' => 'パスワードを入力してください。')
);
あと、$html->tagErrorMsg()は$form->error()に変わったよ!ってリファレンスには書いてあるんでそれ使ってみたんだけど、エラーメッセージが2重に表示される。つか、$form->error()いらない。なにも書いてなくても勝手にエラーメッセージが出ちゃう。
モデルの$validateでmessageを省略したら’rule’に関係なく「空ですよ」的なメッセージが表示される。(意味違ったかもしれないけど同一のデフォルトメッセージが出る)
どうしたら勝手なメッセージを止められるんだ。・・・あ、もしかして
‘message’=>”
って空文字列入れておけばいいのか?まあ、今度試してみます。
以上
・無駄な div は勘弁してよ
・label も自分で書くよ
・error も別枠で表示するよ
なので、こんな感じで使ってます。
$form->input(‘Model.field’,array(‘div’=>false,’label’=>false,’error’=>false));
divとかerrorなんていうパラメータあったんですね。
labelとかは私も消したりしています。
私がフレームワークに慣れていないせいもありますが、Cakeは、Cakeのやりすぎる動作を抑制する方法がいまいち分かりにくい気がします。
そういう細かい動作を追っていると結局時間がかかるという・・・。
いったん分かってしまうまでが長い道のりに感じています。
その上、いったん分かっても週末いじるくらいだと忘れちゃう!
$form->text(‘Model.field’);
を使えばdivもlabelもerrorも表示しませんよ。
ver.1.2.3.8166で確認しましたが。
>tomotomoさん
最近触ってないので、勉強になります。
ちょっと見ない間にだいぶバージョン進んでますね~。