経緯
- CakaPHP 2.3.9においてinListはデフォルトで型チェックを行う。
そのためformから送信したデータとvalidateで用意した型の食い違いにより思うような結果にならなかった事から型のチェックを行わないようにしたいと思った。
思うような結果にならなかった時のコード
- Modelで次のようなvalidateを用意。
$this->validate = array(
'list' => array(
'rule' => array('inList', array(1, 2, 3)),
'required' => true,
'allowEmpty' => false,
'message' => 'invalid',
),
);
- Viewで次のようなradioがある。
<?php echo $this->Form->radio(
'list',
array(1, 2, 3)
); ?>
- formで送信されると値はstringになるが、validateでの定義はintにより、型が異なることでバリデーションでひっかかる。
inListで行われる処理を確認
-
lib/Cake/Utility/Validation.php
を確認したところ...
public static function inList($check, $list, $strict = true) {
return in_array($check, $list, $strict);
}
- in_array()の第三引数にtrueを渡している。
http://php.net/manual/ja/function.in-array.php
inListで型のチェックを行わないように設定変更
- Modelのvalidateで型のチェックまで行いたくないのでinListにfalseを渡すよう変更。
$this->validate = array(
'list' => array(
'rule' => array('inList', array(1, 2, 3), false),
'required' => true,
'allowEmpty' => false,
'message' => 'invalid',
),
);
- 型のチェックを行わないことでバリデーションを通るようになった。