2012-11-13 5 views
8

ユーザーを作成して更新するときにYiiに基づいてWebアプリケーションにパスワードリピートフィールドを設定します。私が両方のフィールドを必要とするようにする場合、更新時には、これらのフィールドを空白にしておくか(パスワードは同じになります)、新しいパスワードを入力して確認してください。どのように私はそれを点けますか?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ない限り検証しません。あなたが言及したように、は新しいレコードを作成しますが、の新しいレコードを作成しますが、アップデートで一致するパスワードを検証したくないです。あなたのモデルを宣言するときに今やるために残されているすべてが、ある

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

:この機能を作成するために、我々は、単に上で見たようが追加parmanterを持っているルールをrepeatpassword変更model scenarios

を使用することができます関数を作成するために、使用します。代わりに、通常の

$model = new MyModel('create'); 

+0

ユーザが後でパスワードを更新しようとしている場合は、現在の設定に関する1つの問題があります。しかしそれ以外は、よく見える。 – acorncom

+0

よくあるのは、更新している場合は、ユーザーにパスワードを2回入力するようにしてもよいでしょう。とにかく($ model = new MyModel( 'create');) –

+0

YiiがARモデルを作成するたびに、デフォルトであるupdateとしてsceario nameを使用することができます。あなたのモデルは '$ model = new MyModel;' –