CakePHP2.5におけるValidation::inListの仕様変更について
はじめに
CakePHP2系のバージョンアップにおいて、CakePHP2.4以前とCakePHP2.5移行ではValidationメソッドの一つであるinListの仕様が若干異なるので記しておきます。
Validation::inList
2.4以前と2.5以降ではチェックの厳密さが変わっています。
2.4以前
CakePHP2.4におけるinListの実装は下記のようになっています。
public static function inList($check, $list, $strict = true) {
return in_array($check, $list, $strict);
}
内部的には、in_array()
をつかっています。defaultでは第三引数がtrueになっているので、型チェックまでを含めた厳密なチェックになっています。
2.5以降
CakePHP2.5におけるinListの実装は下記のようになっています。
public static function inList($check, $list, $caseInsensitive = false) {
if ($caseInsensitive) {
$list = array_map('mb_strtolower', $list);
$check = mb_strtolower($check);
} else {
$list = array_map('strval', $list);
}
return in_array((string)$check, $list, true);
}
2.4以前と異なる大きな点として、
- 型チェックまではしなくなった
-
in_array()
を用いて判定することは変わっていませんが、チェック対象の値である$check
とリストである$list
が両方文字列変換して、in_array()
に渡しています。
-
- 第三引数の扱い
- 2.4以前では第三引数をtrueにした場合より厳格に型チェックをしていましたが、2.5以降の場合はtrueにした場合、Insensitiveという意味どおりよりゆるいチェックをするようになっています。
結論
CakePHP2.5以降のほうがゆるい判定になるので後方互換性は保たれた変更ではありますが、cakePHP2.4以前からバージョンを上げる際にはinListの第三引数に注意が必要そうです。
Author And Source
この問題について(CakePHP2.5におけるValidation::inListの仕様変更について), 我々は、より多くの情報をここで見つけました https://qiita.com/hgsgtk/items/ea39d2e0a4c4f79dad36著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .