4

Kohana の ORM の v3.1.0 では、_ignored_columnsプロパティが削除されたようです。

データベースにないフィールドを処理するために推奨される手法は何ですか? 私が今持っているケースは、パスワードがフィールドである password_confirm ですが、ユーザーはパスワードを 2 回入力する必要があります。

4

1 に答える 1

4

追加の検証オブジェクトを渡して、保存、作成、および更新できます。したがって、例は次のようになります。

/**
 * Password validation for plain passwords.
 * 
 * @param array $values
 * @return Validation
 */
public static function get_password_validation($values)
{
    return Validation::factory($values)
        ->label('password', 'password')
        ->label('password_confirm', 'repeat password')
        ->rule('password', 'not_empty')
        ->rule('password', 'min_length', array(':value', 8))
        ->rule('password_confirm', 'matches', array(':validation', ':field', 'password'));
}

/**
 * Create user account
 * 
 * @param array $values 
 * @param array $keys
 * @throws ORM_Validation_Exception
 */
public function create_user($values, $keys)
{
    $external = Model_User::get_password_validation($values);

    $this->values($values, $keys);
    return $this->create($external);
}

パスワードの検証が create メソッドにどのように渡されるかに注意してください。

値は、モデルに保存する$keys値を指定します。「password_confirm」はそのリストにないため、無視されます。この機能はセキュリティにも関連しているため、ユーザーが POST リクエストで手動で ID を設定することは望ましくありません。

次に、次のように呼び出してユーザーを作成できますcreate_user

$user->create_user($_POST, array('username', 'email', 'password'));
于 2011-02-13T12:13:24.050 に答える