2016年11月13日日曜日

CakePHP behaviorにValidation作る

Cake1.x系ですが、参考になりそうなのでメモ

class AddValidationRuleBehavior extends ModelBehavior {

    function setup(&$model, $config = array())
    {
        //$this->settings = $config;
        mb_internal_encoding("UTF-8");
    }


 /**
  * マルチバイト用バリデーション 文字数上限チェック
  *
  * @param array &$model
  * @param array $wordvalue
  * @param int $length
  * @return boolean
  */
 function maxLengthJP( &$model, $wordvalue, $length ) {
  $word = array_shift($wordvalue);
  //return( mb_strlen( $word, mb_detect_encoding( $word ) ) <= $length );
  return( mb_strlen( $word ) <= $length );
 }

 /**
  * マルチバイト用バリデーション 文字数下限チェック
  *
  * @param array &$model
  * @param array $wordvalue
  * @param int $length
  * @return boolean
  */
 function minLengthJP( &$model, $wordvalue, $length ) {
  $word = array_shift($wordvalue);
  return( mb_strlen( $word ) >= $length );
 }


 /**
  * フィールド値の比較
  * emailとemail_confフィールドを比較する場合などに利用
  * _confは$suffixによって変更可能
  *
  * @param array &$model
  * @param array $wordvalue
  * @param string $suffix
  * @return boolean
  */
 function checkCompare( &$model, $wordvalue , $suffix  ){

  $fieldname = key($wordvalue);

  return ( $model->data[$model->alias][$fieldname] === $model->data[$model->alias][ $fieldname . $suffix ] );


 }



 /**
  * 全角カタカナ以外が含まれていればエラーとするバリデーションチェック
  *
  *
  * @param array &$model
  * @param array $wordvalue
  * @return boolean
  */
 function katakana_only( &$model, $wordvalue){

     $value = array_shift($wordvalue);

     return preg_match("/^[ァ-ヶー゛゜]*$/u", $value);

 }




 /**
  * 全角、半角スペースのみであればエラーとするバリデーションチェック
  *
  * @param array &$model
  * @param array $wordvalue
  * @return boolean
  */
 function space_only( &$model, $wordvalue){

     $value = array_shift($wordvalue);

     if( mb_ereg_match("^(\s| )+$", $value) ){

      return false;
     }else{
         return true;
     }
 }


 /**
  * only Allow 0-9, a-z , A-Z
  *
  * @param array ref &$model
  * @param array $wordvalue
  * @return boolean
  */
 function alpha_number( &$model, $wordvalue ){
  $value = array_shift($wordvalue);
  return preg_match( "/^[a-zA-Z0-9]*$/", $value );

 }

}

?>

0 件のコメント:

コメントを投稿