10

CakePHPの検証ルールを使用して、別のフィールドに応じてフィールドを検証できるかどうか疑問に思います。

カスタム検証ルールに関するドキュメントを読んでいますが、$checkパラメータには検証する現在のフィールドの値のみが含まれています。

例えば。new_passwordフィールドが空でない場合にのみ、 verify_passwordフィールドを必須 として定義したいと思います。(万一に備えて

とにかくJavascriptでそれを行うことができましたが、CakePHPで直接それを行うことは可能かどうか疑問に思います。

4

1 に答える 1

15

モデルのデータを検証するとき、データはすでにset()です。これは、モデルの$dataプロパティでアクセスできることを意味します。次の例では、検証しているフィールドをチェックして、検証ルールで定義されている他のフィールド(パスワード確認フィールドなど)と同じであることを確認します。

検証ルールは次のようになります。

var $validate = array(
    'password' => array(            
        'minLength' => array(
            'rule' => array('minLength', 6),
            'message' => 'Your password must be at least 6 characters long.'
        ),
        'notempty' => array(
            'rule' => 'notEmpty',
            'message' => 'Please fill in the required field.'
        )
    ),
    'confirm_password' => array(
        'identical' => array(
            'rule' => array('identicalFieldValues', 'password'),
            'message' => 'Password confirmation does not match password.'
        )
    )
);

次に、検証関数は渡されたフィールドのデータ(confirm_password)を調べ、それをルールで定義したデータ(に渡された)と比較し$compareFiledます。

function identicalFieldValues(&$data, $compareField) {
    // $data array is passed using the form field name as the key
    // so let's just get the field name to compare
    $value = array_values($data);
    $comparewithvalue = $value[0];
    return ($this->data[$this->name][$compareField] == $comparewithvalue);
}

これは単純な例ですが、を使用して何でもできます$this->data

投稿の例は次のようになります。

function requireNotEmpty(&$data, $shouldNotBeEmpty) {
    return !empty($this->data[$this->name][$shouldNotBeEmpty]);
}

そしてルール:

var $validate = array(
  'verify_password' => array(
    'rule' => array('requireNotEmpty', 'password')
  )
);
于 2013-01-08T14:50:57.700 に答える