2013-12-19 151 views
5

我試圖用yii添加驗證碼到我的聯繫表格中,但驗證時出現了一些問題。yii驗證碼不正確驗證

我的模型

class ContactForm extends CFormModel 
{ 
    public $verifyCode; 

public function rules() 
{ 
    return array(

     array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements(),'on'=>'captchaRequired'), 
     array('verifyCode', 'safe'), 
       ); 
} 
} 

代碼在我的控制器

public function filters() 
{ 
    return array(
     'accessControl', 
    ); 
} 



public function accessRules() 
{ 
    return array(
      array( 'allow', //allow all users to perform advertise and index action 
        'actions' => array('advertise','index', 'captcha'), 
     'users' => array('*'), 
      ), 
    ); 
} 

public function actions() { 
    return array(
     // captcha action renders the CAPTCHA image displayed on the contact page 
     'captcha' => array(
      'class' => 'CCaptchaAction', 
      'backColor' => 0xFFFFFF, 
      'testLimit'=> '2', 
     ), 
    ) 
} 

public actionAdvertise() 
{ $model = new ContactForm; 
    $model->scenario = 'captchaRequired'; 
    if($model->validate()){ 
    //some code 
    } else { 
      $this->render('advertise', array('model' => $model)); 
    } 
} 
} 

代碼在我advertise.php視圖

<form action="" method="post"> 
      <?php 
       $form=$this->beginWidget('CActiveForm',array(
        'id'=>'contact-form', 
        'enableAjaxValidation'=>false, 
       )); 
      ?> 
      <?php if(CCaptcha::checkRequirements()){ ?> 
       <div class="row"> 
     <div class="contact_field_wrapper"> 
       <?php echo '<b>ARE YOU HUMAN?</b><br />'.$form->labelEx($model, 'verifyCode'); ?> 
<div class="captcha user-captcha"> 
     <?php $this->widget('CCaptcha',array( 'captchaAction'=>'site/captcha'));                       
    ?> 
           <?php echo $form->error($model, 'verifyCode'); ?> 
           <?php echo '<br />'.$form->textField($model,'verifyCode'); ?> 
           <div class="hint">Please enter the letters as they are shown in the image above.<br/> 
            Letters are not case-sensitive. 
           </div> 
          </div> 
          </div> 
          </div> 
<?php } ?> 
<?php $this->endWidget(); ?> 
</form> 

的問題是,$model->validate()返回false時,在輸入正確的密碼。 $model->getErrors()總是返回'驗證碼不正確'。

+0

有沒有辦法以某種方式調試此問題? – Aditya

+0

你的模型是空的,驗證返回false –

+0

是'聯繫'表單的名稱?我沒有在數據庫中存儲任何值 – Aditya

回答

2

你的模型是空的,因爲你沒有傳遞給$model->attriburtes

任何值做到這一點:

if($_POST['ContactForm']) 
{ 
    $model->attributes() = $_POST['ContactForm']; 
    if($model->validate()) 
    { 
      //some code 
    } 
} 
$this->render('advertise', array('model' => $model));