【CakePHP】バリデーションでのはまりどころ「required」指定

cake-logoバリデーションについて、勘違いしていたことがあるのでメモ書きをしておきます。

バリデーション指定の中に「required」というパラメータがあるのですが、これは「必ず存在するフィールド」を定義するもののようですね。私は思いっきり「入力の必須項目」と勘違いしていました。

というのは、MediaPluginが上手く動かない場合があってトータル3日くらいはまっていたのですが、実は理由がこれだったのです。
例えば、画像ライブラリを作ると想定して、ファイル情報(つまりAttachment Modelそのもの)の他に「タイトル」や「説明」を含むモデルを作るとしましょう。タイトルや説明を編集したい場合、既にファイルはアップロードされていますから、ファイル関連のフィールドは省きたいところです。しかし、required=>trueとしてしまうと、編集でもファイルアップロードが要求され、更新できなくなります。
同じように、パスワードの変更で、「新しいパスワード」「新しいパスワード(確認)」という項目を作り、両方が正しい場合だけパスワード更新をする、というような場合があります。これも、require=>trueとすると大変なことになります。

動的にフィールドを変更する必要のあるモデルに関しては、requiredは指定しない方がはまりは少ないと感じます。丁寧にやるのなら、「not null」の指定されたフィールドのみ、「on」でcreateとupdateに分け、createにだけrequired=>trueにすると安全かもしれません。 (追記:これはNGでした)

自分だけだったら恥ずかしいのですが、でも勘違いされている人、知らなかった人も多いのではないかと思い書いてみました。いやー、CakePHPは奥が深い!

#でも、required指定は、フィールドに指定するものであって、ruleに指定するものではないような気がする…