cakephp1.2 validateのrequiredとnotEmptyと値が配列の場合についての再考
無駄に悩んでしまったので改めてまとめる。
値がセットされているかだけチェックしたい
<?php // culumn1がパラメーターに含まれているかだけチェックしたい var $validate = array( 'culumn1' => array( 'notEmpty' => array( // このルール名はなんでもいいのでruleに合わせておけばOK 'rule' => 'notEmpty', // ruleは必須 'required' => true, 'message' => '選択必須項目です', ), ), );
「'required' => true」をつけるとキーが含まれているかをチェックする。しかし'required'単体で使ったら意図した挙動にならなかった?ので値が含まれているかだけチェックしたい場合は'notEmpty'とセットで使えばよさそう。どうやら以下の公式ページに'rule'は必須だと書いてあったわ。1.3だけど同じだと思う。
データのバリデーション(Data Validation) — CakePHP Cookbook 1.3 ドキュメント
通常テキストボックスやプルダウンはrequiredつけなくてもキーがpostのデータに含まれるから問題ないけど、チェックボックスの場合はチェックしないとpostデータにキーが含まれないのでrequiredをつけること。
さらに追記
↑のチェックボックスでpostに含まれない件だけど、cakeの「$form->checkbox」を使えばチェックしてなくてもpostに含まれるようになる。その辺がごっちゃになるとメッチャクチャになる。死にたい。
値が配列の場合
まずモデルのvalidateに配列のデータを渡すとそのままだとwarningが出てしまうので、独自にわざわざ関数を作る必要がある。
<?php // culumn1が配列の場合で、パラメーターに含まれているかだけチェックしたい var $validate = array( 'culumn1' => array( 'required' => array( 'rule' => array('isRequiredArray'), 'required' => true, 'message' => '選択必須項目です', ), ), ); function isRequiredArray($field = array()) { // 関数が呼ばれる、即ちキーがセットされていればtrue return true; }
value="0"の0は文字列だからな
例えば以下のようなhtmlがあったとする。
<select> <option value="0">選択してください</option> <option value="1">aaa</option> </select>
これで"0"の場合はnotEmptyで引っかかるだろう、といっつも勘違いする自分を殺したくなる。0は文字列扱いされるからnotEmptyに引っかかりません。いい加減さとれ。この場合は以下のようにする。
<select> <option value="">選択してください</option> <option value="0">aaa</option> </select>
低予算で始められるおすすめのFX口座はこちら。
http://s2fx.com/ranking/856.html