Edited at

[CakaPHP 2.3.9]inList validationで型チェックを行わないようにする

More than 3 years have passed since last update.


経緯


  • 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);
}


inListで型のチェックを行わないように設定変更


  • Modelのvalidateで型のチェックまで行いたくないのでinListにfalseを渡すよう変更。

$this->validate = array(

'list' => array(
'rule' => array('inList', array(1, 2, 3), false),
'required' => true,
'allowEmpty' => false,
'message' => 'invalid',
),
);


  • 型のチェックを行わないことでバリデーションを通るようになった。