0

パスワードを変更するためのフォームとして使用される単純なCFormModelサブクラスがあります。クラスには2つの属性しかありません(password1、password2-確認用-)。コードは次のとおりです。

class ChangePasswordForm extends CFormModel {

  public $password1;
  public $password2;

  public function rules() {
    return array(
      array('password1, password2', 'required'),
      array('password2', 'compare', 'compareAttribute'=>'password1'),
      array('password1, password2', 'safe'),
    );
  }

  public function attributeLabels() {
    return array(
      'password1' => 'Enter new password',
      'password2' => 'Confirm new password',
    );
  }
}

コントローラビューファイルで、CActiveFormオブジェクトを使用してこのフォームをレンダリングします。

<?php
$form=$this->beginWidget('CActiveForm',
  array(
    'id'=>'change-pwd-form',
    'action'=>array('site/changePasswordPost'),
    'enableClientValidation'=>true,
    'enableAjaxValidation'=>true,
    'clientOptions'=>array(
      'validateOnSubmit'=>true,
    ),
  )
);

echo $form->errorSummary($changePwdForm);
?>
<fieldset><legend>Change your password</legend>
  <div class="row">
    <?php
    echo $form->labelEx($changePwdForm, 'password1');
    echo $form->passwordField($changePwdForm, 'password1');
    ?>
  </div>
  <div class="row">
    <?php
    echo $form->labelEx($changePwdForm, 'password2');
    echo $form->passwordField($changePwdForm, 'password2');
    ?>
  </div>
  <div class="row">
    <?php
    echo CHtml::submitButton('Change password');
    ?>
  </div>
</fieldset>
<?php
$this->endWidget();
?>

コントローラアクションでは、ChangePasswordFormオブジェクトを渡して、上記のビューをレンダリングします。

$changePwdForm = new ChangePasswordForm;
$this->render('changePassword', array('userid'=>$userid, 'userType'=>$t,
  'changePwdForm'=>$changePwdForm));
Yii::app()->end();

問題は、ビューがレンダリングされている間、Javascriptコードが生成されないことです。何もない。したがって、送信ボタンをクリックすると、(2つのパスワードフィールドが必須であるため)許可されないはずですが、送信されます。上記のコードの何が問題になっていて、Javascriptが作成されていませんか?

4

1 に答える 1

2

Add $form->error() for fields that you need to validate. I suppose you perform ajax validation in controller, if not - search by performAjaxValidation here

于 2012-11-07T22:16:23.327 に答える