8

ユーザーを作成および更新するときに、Yiiに基づいてWebアプリケーションにパスワードリピートフィールドが必要です。作成時に両方のフィールドを必須にし、更新時に、ユーザーはこれらのフィールドを空のままにするか(パスワードは同じになります)、新しいパスワードを入力して確認します。どうすれば点在できますか?

4

1 に答える 1

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"),
                ...
            );
    }

これで、新しいモデルが作成されたときに、password属性とrepeatpassword属性が一致しない限り、モデルは検証されません。あなたが言ったように、これは新しいレコードを作成するのに問題ありませんが、アップデートで一致したパスワードを検証したくありません。この機能を作成するために、モデルシナリオを使用できます

上記のようにrepeatpasswordルールを変更して、パーマンターを追加します。

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

あとは、create関数でモデルを宣言するときに、次を使用するだけです。

$model = new MyModel('create');

通常の代わりに:

$model = new MyModel;
于 2012-11-13T17:30:32.907 に答える