独自のバリデーションルール
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
(ミリ秒形式<北緯~ 東経~>などには非対応)
関連記事
-
Secutiryユーティリティ
CakePHPでは、データのハッシュ化もしくは暗号化のためのメソッドSecurityユーティリティが用意されています。 ソース: /cake/libs/security.php Security:
-
Debugkitをインストール
CakePHPのデバッグツールとしてはデファクトスタンダードといってもいいDebugkitをインストールしました。 ダウンロード CakePHP 1.3用 https://github.com
-
複数ファイルアップロード
CakePHPで複数ファイルのアップロードについて調べてみました。といっても普通のPHPのコードと同じではありますが、postするフィールド名に[]を付与して配列にします。 view
-
recursive設定によるfind()性能改善
CakePHPでは、モデルにアソシエーションを設定している場合、recursive(=>joinする階層)はデフォルトで0に設定されています。「recursiveゼロ」の意味するところとは、「1跨ぎま
-
ログローテーション
CakePHP1.3では標準ではログはタイプごとに出力されるだけで、定期的なローテーションを行ってくれません。放っておくとひたすら1つのファイルにアペンドされていきます。app/tmp/logs以下に
-
シンプルに設置できる数字Captcha「MathCaptcha」
スパム防止などで利用されているCaptchaですが、数字版で使えるものがないか探してみました。 この「MathCapthca」は非常にシンプルに設置できるのはいいですが、やっぱりクエスチョンの部分は
-
CakePHP 1.3 インストール
使い古されている手ではありますが、表題の件とレンタルサーバへの配置方法などにも使えますので参考にしていただけたらと思います。 まずはレンタルサーバでCakePHPを動作させる CakePHPア
-
validateErrors と validationErrors
CakePHP試験中に気付いたことがあって、メモです。 $this->validateErrors自身バリデーション処理している 今まで、save時にバリデーションエラーメッセージををログに出力し
-
Htmlヘルパー
ソース:\cake\libs\view\helpers\html.php charset / 文書の文字コードを設定する <?php echo $this->Html-
-
ユーザ登録(仮登録・メール・本登録)
ここ最近は、メールアドレスだけでなく、SNSのアカウントと連携してユーザ登録することもできるWebサービスが増えてきましたね。ユーザは割合としてどちらを選んでるのか気になるところですが。私はできるだけ
- PREV
- ビルトインされたバリデーションルール
- NEXT
- コントローラ内でバリデーション処理を呼び出す
Comment
[…] http://kwski.net/cakephp-1-3/552/ […]