1

モデルフィールドのデフォルト値について質問があります。この問題により、しばらくの間私は夢中になっています。

例を挙げると、検証が必要なステータスフィールドを持つモデルがあります。

$validate = array (
    ...
    'status' => array(
        'list' => array(
            'rule' => array('inList', array('0','1')),
            'allowEmpty' => true
        )
    )
)

データベースに挿入されるデータは、フォームから送信されません。

ステータスフィールドがない場合は、デフォルトで1にします。それ以外の場合は、検証する必要があります。

カスタム検証ルールを使用せずにモデルからこれを行う方法はありますか?MySQLテーブルにデフォルト値を設定できることはわかっていますが、別の値が送信された場合に備えて、モデルからデフォルト値を検証したいと思います。

編集

Validationクラスコードを調べましたが、inList検証はin_arrayチェックのばかげたラッパーにすぎません。

Cake.Utility.Validation.php

public static function inList($check, $list, $strict = true) {
   return in_array($check, $list, $strict);
}

ご存知のとおり、CakePHP Api docs($ strict)に記載されていない3番目のパラメーターもあります。デフォルトはtrueです。

in_arrayドキュメントから:

3番目のパラメーターstrictがTRUEに設定されている場合、in_array()関数は干し草の山の中の針のタイプもチェックします。

それでも問題は解決しませんが、allowEmptyがtrueに設定されていても、array('inList'、array( '0'、 '1'))が空のフィールドを検証しなかった理由がわかりました。

ありがとうございました。

4

1 に答える 1

1

beforeSaveメソッドを使用して、デフォルト値を設定できます。trueを返すことを忘れないでください。そうしないと、保存が中止されます。

于 2012-11-25T14:44:13.010 に答える