【问题标题】:Yii password repeat fieldYii 密码重复字段
【发布时间】:2012-11-02 01:25:23
【问题描述】:

创建和更新用户时,我希望在基于 Yii 的 Web 应用程序中重复密码字段。创建时我希望这两个字段都是必需的,更新时,用户可以将这些字段留空(密码将相同)或输入新密码并确认。怎么点呢?

【问题讨论】:

标签: yii passwords confirmation


【解决方案1】:

首先,您需要在模型中创建一个新属性(在本例中,我们称之为 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('create');)
  • 您可以使用 sceario 名称作为更新,这是 Yii 每次创建 AR 模型时的默认值。所以你的模型变成$model = new MyModel;
猜你喜欢
  • 2013-03-25
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 2011-08-14
  • 2016-01-07
相关资源
最近更新 更多