2012-11-13 5 views
8

사용자 생성 및 업데이트시 Yii 기반의 웹 응용 프로그램에서 암호 반복 필드를 원합니다. 생성 할 때 두 필드를 모두 필요로하고 업데이트 할 때 사용자는이 필드를 비워 두거나 (암호는 동일하게됩니다) 새 암호를 입력하고 확인하십시오. 나는 그것을 어떻게 쓸 수 있습니까?Yii 암호 반복 필드

+2

http://www.yiiframework.com/wiki/277/model-password-confirmation-field/ – Stu

답변

19

첫번째로, 당신은 (우리가 을 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하지 않는 한 유효성을 검사하지 않습니다. 언급했듯이 을 새로 작성하면이라는 새 레코드가 생성되지만 업데이트에서 일치하는 암호의 유효성을 검사하지 않으려합니다. 추가 parmanter이 위 볼 때이 기능을 만들려면, 우리는 model scenarios

우리는 단순히 repeatpassword 규칙을 변경 사용할 수 있습니다 모델을 선언 할 때

... 
array('repeatpassword', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match",'on'=>'create'), 
... 

을 모든이가 지금 할 남아있다 기능을 생성하기위한에 사용하는 대신 정상의

$model = new MyModel('create'); 

:

,371을
+0

사용자가 나중에 자신의 비밀번호를 업데이트하려고하는 경우 현재 설정에 대한 한 가지 어려움이 있습니다. 하지만 그 외의 것은 좋아 보인다. – acorncom

+0

일반적으로 업데이트하는 경우 사용자에게 암호를 두 번 입력하도록 요청할 수 있습니다. 나는이 시나리오를 어쨌든 설명했다. ($ model = new MyModel ('create');) –

+0

Yii가 AR 모델을 생성 할 때마다 기본값 인 update로 sceario 이름을 사용할 수있다. 그래서 당신의 모델은'$ model = new MyModel;' –