2

Kohana 3.1 で「一致」検証ルールを適用する方法を知る必要があります。モデルで次のルールを試しましたが、成功しませんでした:

'password_confirm' => array(
    array('matches', array(':validation', ':field', 'password')),
)

しかし、それは常に失敗します。var_dump($array)Valid::matches() メソッドの最初の行にa を追加しました。以下に貼り付けます。

/**
 * Checks if a field matches the value of another field.
 *
 * @param   array    array of values
 * @param   string   field name
 * @param   string   field name to match
 * @return  boolean
 */
public static function matches($array, $field, $match)
{
    var_dump($array);exit;
    return ($array[$field] === $array[$match]);
}

タイプ Validation のオブジェクトを出力し、var_dump($array[$field])そうするとnull.

よろしくお願いします。

更新:また、ルールのパラメーターの順序をこれに反転する必要があることを検証メッセージで把握しました:

'password_confirm' => array(
    array('matches', array(':validation', 'password', ':field')),
)
4

1 に答える 1

4

構文は正しいですが、DB スキーマに「password_confirm」列がないため、存在しないフィールドにルールを追加しようとしていると推測して言います。

とにかく、パスワード確認の一致検証を実行する適切な場所はモデルではなく、保存しようとしたときにコントローラーでモデルに渡される追加の検証としてです。

これをユーザーコントローラーに入れます:

$user = ORM::Factory('user');

// Don't forget security, make sure you sanitize the $_POST data as needed
$user->values($_POST);

// Validate any other settings submitted
$extra_validation = Validation::factory(
    array('password' => Arr::get($_POST, 'password'),
          'password_confirm' => Arr::get($_POST, 'password_confirm'))
    );

$extra_validation->rule('password_confirm', 'matches', array(':validation', 'password_confirm', 'password'));

try 
{
    $user->save($extra_validation);
    // success
}
catch (ORM_Validation_Exception $e)
{               
   $errors = $e->errors('my_error_msgs');
   // failure
}

また、詳細については、Kohana 3.1 ORM Validation のドキュメントを参照してください。

于 2011-05-26T20:12:35.397 に答える