もふもふ技術部

CakePHPのvalidation機能を使ってみる


概要

CakePHPのモデルに$validationと書いて、いろんなものを防いでみる。

CakePHP2.2.5を利用。

今回利用するモデル

こんな感じのテーブルについて、いろいろバリバリしてみる。

usernameやpasswordは半角英数が入る。roleはadminかuserのどちらかが入るものとし、それ以外が来た時はエラーにしたい。

必須チェック

とりあえず必須チェックから書いてみる。一番簡単な書き方は、おそらくこんな感じ。usernameとpasswordにnotEmptyを指定し、空文字を拒否するようにしている。

上記内容を対象のModelに対して記述する。

これで何も入力せずに登録画面から登録すると、デフォルトのエラーメッセージが表示される。

エラーメッセージを変更する

デフォルトだと「This field cannot be left blank」というメッセージが出るので、これを任意のものに変更しておく。

これでユーザ名を入力しなかった場合に、messageで指定した「何か書こうよ」がエラーメッセージとして表示されるようになった。

エラーメッセージの色を変更したい場合は、CSSのclassが「error-message」で設定されているので、そこをcolorを赤なり黄なりに指定する。

文字数を指定する

パスワードを8〜20文字の間で指定させたいといった要件の場合は、betweenを使えばいいらしい。

8文字以上という条件の場合は、minLength。

上記のようにallowEmptyを指定しておくと、空白も許可するようになる。

maxLengthとminLengthを同時に設定してみる。

minlenとmaxlenのところは任意の文字列。たぶん。

しかしここまで来るとだんだんarray地獄になってきた感があるな、と思ったけどうちのPHPのバージョン、5.4だった。というわけでarray()の代わりに[]でも書ける。[]で書くべきか、先方の都合でバージョン古かった時に備えてarray()で書いておくべきか、悩みどころではある。

指定文字列かどうか確認する

inListを使うと、指定された文字列以外を弾くことができる。

権限で、「管理者」か「一般」のどちらかが選択される、といった場合のチェックはこんな感じ。

正規表現でチェックする

なんだかんだいって、正規表現が最強だよね。正規表現を使う場合は、customを利用する。

これとmaxLengthとnotEmptyを覚えれば、たいていのエラーチェックは事足りる気がする。

一意チェックをする

ユーザ名は重複して登録されると困る。こうした場合の一意性のチェックはisUniqueで行えるらしい。

ということで、下記はユーザ名に対して入力チェックをかけつつ、ユニークであることもチェックしようとした記述。

独自のvalitionを定義する

用意されたルールではなんともならない時は自前で書けば良いらしい。

たとえば「文字数は奇数であること」という奇妙なチェックがあった場合。

上記のようにruleで関数名を指定してやれば、名前の関数が呼ばれるらしい。

The following two tabs change content below.
masato watanabe

masato watanabe

もふもふ部ブレーン。プログラマ兼ライター。