2

私は Yii 1.1 を使用していbootstrap.widgetsます。CCaptchaYii のwithを使用して、登録フォームに CAPTCHA を実装しようとしていCCaptchaActionます。

現在UserController、CAPTCHA 画像のレンダリングを処理し、CAPTCHAaccessRulesを使用できるように設定する があります。は、 CAPTCHA タイプに対して検証され、空であってはならないRegisterFormというルールを設定したモデルです。verifyCode最後は私のビューで、ウィジェットが提供するものRegisterを使用してフォームをレンダリングするだけです。YiiBooster のドキュメントTbActiveFormによると、 の拡張バージョンであるため、無効にする必要があります。TbActiveFormCActiveFormajaxValidation

検証が常に失敗するという事実に苦しんでいます。フィールドへの入力verifyCodeは正しいので、検証が失敗した理由は、フォームに表示されている CAPTCHA と比較していないためだと思います。ただし、これについては確信が持てず、テストする方法もわかりません。これは私が得ているエラーです:

" array(1) { ["verifyCode"]=> array(1) { [0]=> string(35) "検証コードが正しくありません。} }

この質問への答えは私を助けませんでした。

UserController.php

class UserController extends Controller
{

    /**
     * Declares external action controller
     */
    public function actions()
    {
        return array(
            // captcha action renders the CAPTCHA image displayed on the register page
            'captcha' => array(
                'class' => 'CCaptchaAction',
                'backColor' => 0xFFFFFF
            )
        );
    }

    /**
     * Specifies the access control rules.
     * This method is used by the 'accessControl' filter.
     * @return array access control rules
     */
    public function accessRules()
    {
        return array(
            array(
                'allow',
                'actions' => array(
                    'register',
                    'captcha'
                )
            )
        );
    }

    /**
     * Register new user
     */
    public function actionRegister()
    {
        $model = new RegisterForm(); // Create new register-form
        $request = request();
        if ($request->isPostRequest) {
            $model->attributes = $request->getPost('RegisterForm');
            if (!$model->validate()) {
              var_dump($model->getErrors());
            }
            if ($model->validate()) {
              var_dump('Got here, so it works!');
            }
        }
        $this->render('register', array('model' => $model));
    }

}

RegisterForm.php

class RegisterForm extends CFormModel
{
    public $verifyCode;

    public function rules()
    {
        return array(
            array('verifyCode', 'captcha', 'allowEmpty' => !CCaptcha::checkRequirements())
        );
    }

    /**
     * Declares attribute labels.
     */
    public function attributeLabels()
    {
        return array(
            'verifyCode' => 'Verification Code',
        );
    }
}

Register.php

<div>
  <?php
    $form = $this->beginWidget(
        'bootstrap.widgets.TbActiveForm',
        array(
            'id' => 'register-form',
            'layout' => TbHtml::FORM_LAYOUT_HORIZONTAL
        )
    );
  ?>
  <fieldset>
      <?php
        if(CCaptcha::checkRequirements()):
          echo $form->labelEx($model, 'verifyCode');
          $this->widget('CCaptcha');
          echo $form->textField($model, 'verifyCode', array(), false, false);
          echo $form->error($model, 'verifyCode', array(), false, false);
        endif;
      ?>
  </fieldset>
  <?php
    echo TbHtml::submitButton(
        t('user', 'Register'),
        array(
          'id' => 'submit-button',
          'color' => TbHtml::BUTTON_COLOR_PRIMARY,
          'size' => TbHtml::BUTTON_SIZE_LARGE,
          'block' => true
        )
    );
    $this->endWidget();
  ?>
</div>
4

0 に答える 0