独自のバリデーションルール

CakePHPで組み込みバリデーションをつくる方法は色々あります。
参考:Data Validation — CakePHP Cookbook v1.3 documentation
上記リンク内にある例2つです。

例1 バリデーションルール

'rule'に正規表現を直書きしてもいいようです。
正規表現はスラッシュで囲まれている必要があります。ここでは、「文字と数字のみで3文字以上となる値を入力」というバリデーション

var $validate = array(
    'login' => array(
        'rule' => '/^[a-z0-9]{3,}$/i',
        'message' => 'Only letters and integers, min 3 characters'
    )
);

例2 バリデーションメソッド

メソッドにすることもできます。
'rule' => array(function名, 引数1, 引数2,,,,,)となります。
function側は第一引数(下でいう$check)にそのカラムデータが入り、'rule'側の引数1が引数2($limitに25が入るイメージ)に、2が3,,,となります。
ここでは、「カラムの重複データが、25件までだったらOK」というバリデーション。ちゃんとrecursive=-1がついてる(偉い!)

class User extends AppModel {
    var $name = 'User';

    var $validate = array(
        'promotion_code' => array(
            'rule' => array( 'limitDuplicates', 25),
            'message' => 'This code has been used too many times.'
        )
    );

    function limitDuplicates( $check, $limit){
        //$check will have value: array( 'promomotion_code' => 'some-value')
        //$limit will have value: 25
        $existing_promo_count = $this->find( 'count', array( 'conditions' => $check, 'recursive' => -1) );
        return $existing_promo_count < $limit;
    }
}

設定箇所

各モデル内に定義することができますしし、広く使用する場合は、app_model.php内に定義すればどこでも使用可能になります。(app/app_model.php)

いろいろつくって使用しているものです。

正の整数 (自然数)

function isPositiveNumber($check){
  $value = array_values($check);
  $value = $value[0];
  return preg_match('/^[1-9][0-9]*$/',$value);
}

緯度・経度 (degree形式)

var $validate = array(
  'latlng' => array(
    'degree' => array(
      'rule' => '/^-?([0-8]?[0-9]|90)\.[0-9]{1,6},-?((1?[0-7]?|[0-9]?)[0-9]|180)\.[0-9]{1,6}$/',
      'message' => 'invalid latitude and longitude.',
    ),
  ),
  // ..
);

カンマ区切りで緯度経度が表現されているか。(竹島であれば、37.243004,131.864469)
緯度:-90.000000 ~ 90.000000 / 経度: -180.000000 ~ 180.000000
(ミリ秒形式<北緯~ 東経~>などには非対応)

  • このエントリーをはてなブックマークに追加

関連記事

Textヘルパー

Textヘルパーには、テキスト処理に関する便利な機能があります。リンク付与やテキストの抜粋・ハイライトや切り取り処理など。ソース:/cake/libs/view/helpers/text.php

no image

Debugkitをインストール

CakePHPのデバッグツールとしてはデファクトスタンダードといってもいいDebugkitをインストールしました。 ダウンロード CakePHP 1.3用 https://github.com

no image

Jsヘルパーを使用してAjax更新

更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。 Jsヘルパーを使用して

no image

recursive設定によるfind()性能改善

CakePHPでは、モデルにアソシエーションを設定している場合、recursive(=>joinする階層)はデフォルトで0に設定されています。「recursiveゼロ」の意味するところとは、「1跨ぎま

メール送信(qdmail)

CakePHP(+qdmail)でメール送信する処理を実装しました。 準備 2つのライブラリ(.php)をダウンロードし、以下のように配置して下さい。 app/controllers/compo

no image

ユーザ登録(仮登録・メール・本登録)

ここ最近は、メールアドレスだけでなく、SNSのアカウントと連携してユーザ登録することもできるWebサービスが増えてきましたね。ユーザは割合としてどちらを選んでるのか気になるところですが。私はできるだけ

no image

WYSIWYGエディタを実装

WYSIWYGエディタをCakePHPにいくつか試してみました。 CKEditor 実装 // head // View(~.ctp) 解凍してwebroot/jsフ

no image

validateErrors と validationErrors

CakePHP試験中に気付いたことがあって、メモです。 $this->validateErrors自身バリデーション処理している 今まで、save時にバリデーションエラーメッセージををログに出力し

no image

Secutiryユーティリティ

CakePHPでは、データのハッシュ化もしくは暗号化のためのメソッドSecurityユーティリティが用意されています。 ソース: /cake/libs/security.php Security:

no image

ログローテーション

CakePHP1.3では標準ではログはタイプごとに出力されるだけで、定期的なローテーションを行ってくれません。放っておくとひたすら1つのファイルにアペンドされていきます。app/tmp/logs以下に

Comment

CakePHP | For Want Of A Better Word へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

    PAGE TOP ↑