2011-02-13 76 views

回答

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请求中手动设置标识。

然后你就可以通过调用create_user创建一个用户:

$user->create_user($_POST, array('username', 'email', 'password')); 
+0

我想这是一个很值得做的唯一途径。去做一些其他的事情有点痛苦。顺便说一句,谢谢你升级到3.1后发布。这很有帮助,我有更大的名单... – 2011-02-14 04:21:22

相关问题