cakephpのmodelのminLength,maxLengthが微妙。このエントリをはてなブックマークに追加

10 月 17, 2008

ちょっとだけ。

今日、modelのvalidation使って、minLengthとmaxLengthを使おうとしたのだが、挙動が微妙。
ソースを見てたらこんな感じ。
CAKE_PATH/libs/validation.php

<?php
function minLength($check, $min) {
    $length = strlen($check);
    return ($length >= $min);
}
function maxLength($check, $max) {
    $length = strlen($check);
    return ($length <= $max);
}
?>

なるほどな。stlenか。そりゃおかしいわけだ。海外ってマルチバイト対応しなくていいのかなーというかどの環境でも動くようにという配慮かな。

とりあえず回避策として・・・validation.phpにマルチバイト対応の関数を追加。SJISのフォームから送られてくること前提で。

<?php
function mbminLength($check, $min) {
    $check = mb_convert_kana($check, "KVA", "SJIS-win");
   $length = mb_strwidth($check);
   return ($length > $min);
}
?>

ついでにreturn部分の「>=」から「>」に変更した。
そっちのほうが都合がよさそうだったので。

あとはmodelのvalidationで rule=>”mbminLength”と指定すればOK.
動作保障はないよ!

Categories: cakephp
Tags:

コメントはまだありません »

このコメント欄の RSS フィードトラックバック URL

コメントはまだありません。

コメントをどうぞ