[Ethna]$form_templateを使うときの注意点

Ethnaのアクションフォームでは$form_tempalteという便利な機能があり、バリデーション時によく使う共通項目を親クラスに定義して使いまわすことができます。

ところが1点落とし穴があります。それはバリデーションの順番です。
親クラス
    var $form_template = array(
        'user_id' => array(
            'type'          => VAR_TYPE_INT,
            'min'           => 1,
            'max'           => 2147483647,
        ),
子クラス
    var $form = array(
        'user_id' => array(
            'checkhoge'           => true,
        ),
このようなことをしたいとします。
checkhogeプラグインが呼ばれるときには、type,min,maxなどのチェックが終わっていることを当然期待してしまうのですが、残念ながらそうはなりません。

子クラスのvalidate()を呼び出すと、バリデーションの順番は下記のようになります。

checkhoge → type → min → max

こうなると、checkhogeにはINT型の自然数が渡されるという保証がないので、-1やら'a'やらいろんな値が入ってきてしまいます。
checkhoge内で独自にチェックしないといけないのです。

よい方法はないものか・・・
カテゴリ:

人気記事