読者です 読者をやめる 読者になる 読者になる

cakephp1.2 validateのrequiredとnotEmptyと値が配列の場合についての再考

cakephp

無駄に悩んでしまったので改めてまとめる。

値がセットされているかだけチェックしたい

<?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