2012-11-13 31 views
8

Yii temelli web uygulamasında kullanıcı oluştururken ve güncellerken parola tekrarlama alanı istiyorum. Oluştururken her iki alanın da olmasını istiyorum ve güncelleme yaparken, kullanıcı bu alanları boş bırakabilir (şifre aynı olacaktır) veya yeni şifre girip onaylayın. Nasıl noktalayabilirim?Yii parola tekrar alanı

+2

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

cevap

19

Öncelikle, siz (biz repeatpassword dediğimiz bu örnekte) Modelinizdeki Yeni özellik yaratmak gerekir:

class MyModel extends CActiveRecord{ 
    public $repeatpassword; 
    ... 

Sonraki, bunun mevcut anahtar maçları sağlamak için bir kural tanımlamanız gerekir şifre özellik: yeni bir model oluşturulduğunda

public function rules() { 
      return array(
       array('password', 'length', 'max'=>250), 
       array('repeatpassword', 'compare', 'compareAttribute'=>'password', 'message'=>"Passwords don't match"), 
       ... 
      ); 
    } 

Şimdi, modeli şifre ve maç niteliklerinirepeatpassword sürece doğrulama yapmaz. Daha önce de belirttiğiniz gibi, için yeni bir kayıt oluşturuyorsunuz, ancak güncelleştirmesi'daki eşleşen parolayı doğrulamak istemiyorsunuz. Ek bir parmanter olması yukarıda görüldüğü gibi bu işlevi oluşturmak için, model scenarios

Biz sadece repeatpassword kuralını değiştirmek kullanabilirsiniz: modelinizi bildirirken

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

Bütün bunlar şimdi yapmak için bırakılır, olduğu fonksiyonunu oluşturmak için üzerinde kullanın: yerine normalin

$model = new MyModel('create'); 

:

$model = new MyModel; 
+0

Geçerli ayarlarınızdan bir tanesi kullanıcı daha sonra şifresini güncellemeye çalışıyorsa. Ama bunun dışında iyi görünüyor. – acorncom

+0

Genelde, büyük olasılıkla kullanıcının, güncellemeleri yapıyorsa şifresini iki kez girmesini isteyebilirsiniz. Bu senaryoyu yine de hesaba kattım ($ model = yeni MyModel ('oluşturmak');) –

+0

Yii, AR modelini her defasında oluşturduğunda, varsayılan olarak güncellemeyi kullanabilirsiniz. ve böylece modeliniz $ modeli = yeni MyModel olur; –