CakePHPを使用していて、以前からわかっているようで、わかっていないような気がすることがありました。それはバリデーションルールにあるallowEmptyrequiredです。

 これって、わかるようでわかりにくい内容で、それをまとめたサイトもあるのですが、それを読んでもどうもシックリ来なかったりします。そこで、下記に自分用にまとめてみました。ちなみにCakePHPのバージョンは1.3です。

英語での意味

 まず、それぞれの英語の意味を明記しておきます。

allowEmpty
空を許す、空を許可する
required
要する、必要とする、命じる、要求する

まあ、わざわざ書かなくてもわかることでしょうが、書いておいた方が何となく優しかったりしますので。

Cakebookだと

 それではそれぞれをCakePHPのドキュメントであるCakebookで見てみると

allowEmpty
デフォルトはNull。つまり常にバリデーションルールが適用される。
false → フィールドが存在しその値が空で無いこと。
true → 空のフィールドは他に設定された全てのバリデーションを無視。
required
送られたデータにキーが存在し、値が空の場合は、バリデーションは成功します。「required」を true にすると、キーの存在だけを検証します。
デフォルトはfalse。
true:フィールドはデータの配列中に存在しなければならない。

 これだけを見てわかる人はわかりますが、わからない人はわからないですよね。

自分なりにまとめてみる前の前提条件

 上記のことを踏まえて、自分なりにまとめてみようと思いますが、その前にチェックするデータ形式などを決めておきましょう。チェックするデータは下記のようなUserモデルにあるnameフィールドに「俺だよ俺」という値が入っているものとします。

$this->data[‘User’][‘name’] = ‘俺だよ俺’;

allowEmptyとは

 さて、まずはallowEmptyです。allowEmptyは英訳したとおり「空を許可するか」です。でも、これはただ単純に「俺だよ俺」が入っているかではありません。Cakebookのfalseに「フィールドが存在し・・・」がキーポイントです。簡単に一文で書くと$this->data[‘User’]で「name」フィールドがあって(存在して)、「俺だよ俺」などの値が入っていること。がallowEmptyのfalseでチェックします。ちょっとややこしいですかね。簡単にわかるように表にしてみましょう。

フィールド allowEmpty
True False
有り 有り OK OK
無し OK Error
無し 無し OK OK

 表内の「OK」はバリデーションに引っ掛からないという意味で、「Error」はバリデーションに引っ掛かると言うことです。わかるかな?

requiredとは

 次にrequiredなんですが、英訳からすると「必須」かどうかなんですが、これもちょっとややこしく値が必須じゃなく、フィールドが必須かどうかということなんです。つまり$this->data[‘User’]に「name」のキーが存在するかどうかをチェックしているのです。同じく表で書くと下記のようになります。

フィールド required
True False
有り 有り OK OK
無し OK OK
無し 無し Error OK

簡単にまとめると

 どうでしょうかね?わかりますか?とにかくややこしいですよね。とにかく簡単にまとめると

allowEmpty
フィールドがある場合に値の有無をチェック
required
フィールドの有無をチェック

といった感じでしょうか?これであっているかな・・・。何か書いているうちに自信がなくなってきた( ̄ー ̄;