4

似乎在 Kohana 的 ORM 的 v3.1.0 中,该_ignored_columns属性已被删除。

处理不在数据库中的字段的推荐技术是什么?我现在的情况是 password_confirm,其中密码是一个字段,但我们要求用户输入两次密码。

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 回答