【发布时间】:2012-11-02 01:25:23
【问题描述】:
创建和更新用户时,我希望在基于 Yii 的 Web 应用程序中重复密码字段。创建时我希望这两个字段都是必需的,更新时,用户可以将这些字段留空(密码将相同)或输入新密码并确认。怎么点呢?
【问题讨论】:
标签: yii passwords confirmation
创建和更新用户时,我希望在基于 Yii 的 Web 应用程序中重复密码字段。创建时我希望这两个字段都是必需的,更新时,用户可以将这些字段留空(密码将相同)或输入新密码并确认。怎么点呢?
【问题讨论】:
标签: yii passwords confirmation
首先,您需要在模型中创建一个新属性(在本例中,我们称之为 repeatpassword):
class MyModel extends CActiveRecord{
public $repeatpassword;
...
接下来,您需要定义一个规则以确保它与您现有的密码属性匹配:
public function rules() {
return array(
array('password', 'length', 'max'=>250),
array('repeatpassword', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match"),
...
);
}
现在,当创建新模型时,除非密码和 repeatpassword 属性匹配,否则模型将不会验证。正如您所提到的,这对于 创建 新记录来说很好,但您不想在 更新 时验证匹配的密码。要创建这个功能,我们可以使用model scenarios
我们只需改变上面看到的 repeatpassword 规则来获得一个额外的参数:
...
array('repeatpassword', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match",'on'=>'create'),
...
现在剩下要做的就是在为 create 函数声明模型时,使用:
$model = new MyModel('create');
而不是正常的:
$model = new MyModel;
【讨论】:
$model = new MyModel;