2012-11-13 14 views
8

Desidero inserire un campo per la ripetizione della password nella mia applicazione Web basata su Yii durante la creazione e l'aggiornamento dell'utente. Quando creo, voglio che entrambi i campi siano obbligatori e quando l'aggiornamento, l'utente può lasciare questi campi vuoti (la password sarà la stessa) o inserire la nuova password e confermarla. Come posso punteggiarlo?Campo ripetizione password Yii

+2

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

risposta

19

Il primo, è necessario creare un nuovo attributo nel modello (in questo esempio lo chiamiamo repeatpassword):

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

successivo, è necessario definire una regola per assicurarsi che corrisponda il vostro attuale attributo Password:

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

Ora, quando si crea un nuovo modello, il modello sarà non convalida a meno che la password e repeatpassword attributi partita. Come hai detto, questo è valido per creando un nuovo record, ma non vuoi convalidare la password corrispondente sull'aggiornamento . Per creare questa funzionalità, possiamo usare model scenarios

Abbiamo semplicemente cambiare il repeatpassword regola come visto sopra per avere una parmanter aggiuntivo:

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

Tutto ciò che rimane da fare ora, è quando si dichiara il proprio modello su per la funzione di creare, utilizzare:

$model = new MyModel('create'); 

Invece del normale:

$model = new MyModel; 
+0

Un trucco sulla configurazione corrente è se l'utente sta tentando di aggiornare la password in un secondo momento. Ma a parte questo, sembra buono. – acorncom

+0

Generalmente, probabilmente chiederesti all'utente di inserire la propria password due volte se si aggiornassero. Ho comunque tenuto conto di ciò con lo scenario ($ model = new MyModel ('create');) –

+0

È possibile utilizzare il nome sceario come aggiornamento che è predefinito ogni volta che Yii crea un modello AR. e così il tuo modello diventa '$ model = new MyModel;' –