2013-05-18 113 views
0

我Yii中我的工作,我只是一個初學者,並盡我所能去學習框架,這裏是我被困在其中:Yii的驗證碼錯誤

我創建了一個用戶模型和去所需表格有了它,我想實現的驗證碼爲它:

這是在用戶模式我的驗證規則:

$public verifyCode 

public function rules() 
    { 
     // NOTE: you should only define rules for those attributes that 
     // will receive user inputs. 
     return array(
      array('username, password, email', 'required'), 
      array('username','unique'), 
      array('email','email'), 
      array('verifyCode', 'captcha', 'allowEmpty'=>!CCaptcha::checkRequirements()), 
      array('username, password', 'length', 'max'=>45), 
      array('email', 'length', 'max'=>100), 
      array('active', 'length', 'max'=>1), 
      array('created_on, updated_on', 'safe'), 
      // The following rule is used by search(). 
      // Please remove those attributes that should not be searched. 
      array('id, username, password, email, created_on, updated_on, active', 'safe', 'on'=>'search'), 
     ); 
    } 

這是我被覆蓋的動作()在我的UserController中:

public function actions(){ 
     return array(
     'captcha'=>array(
      'class' => 'CCaptchaAction', 
      ) 
      ); 
    } 

這是我的看法文件:

<?php if(CCaptcha::checkRequirements()): ?> 
    <div class="row"> 
     <?php echo $form->labelEx($model,'verifyCode'); ?> 
     <div> 
     <?php $this->widget('CCaptcha'); ?> 
     <?php echo $form->textField($model,'verifyCode'); ?> 
     </div> 
     <div class="hint">Please enter the letters as they are shown in the image above. 
     <br/>Letters are not case-sensitive.</div> 
     <?php echo $form->error($model,'verifyCode'); ?> 
    </div> 
    <?php endif; ?> 

據我,我認爲我正確但是所做的一切,是沒有得到生成的驗證碼圖像。哦,是的GD庫已安裝,如果我導航到網站/聯繫人,那麼驗證碼生成罰款。

我似乎不明白,我在哪裏弄錯了。

這是我看到的東西:

enter image description here

的形式似乎不過是工作的罰款,我不能看到的驗證碼圖像。

任何幫助,將不勝感激。

問候,

+2

有可能是訪問權限到'CCaptchaAction'問題。你看過[這個解決方案](http://stackoverflow.com/a/11971926/506695)? – Ezze

+0

同時檢查你是否在php中有'gd'庫。嘗試直接獲取圖像,並查看是否有任何錯誤,將圖像下載到您的電腦並檢查它的內容,也可能有一些提示。 – 2013-05-19 11:46:16

+0

gd是好的,因爲'CCapcha :: checkRequirements()'返回true – rzelek

回答

1

我得到了答案,那是因爲在控制器中定義的訪問規則,我不得不修改控制器AccessControl的,像這樣:

public function accessRules() 
    { 
     return array(
      array('allow', // allow all users to perform 'index' and 'view' actions 
       'actions'=>array('index','view','captcha'), 
       'users'=>array('*'), 
      ), 
      array('allow', // allow authenticated user to perform every action 
       'actions'=>array('create','update','admin','delete'), 
       'users'=>array('@'), 
      ), 

      array('deny', // deny all users 
       'users'=>array('*'), 
      ), 
     ); 
    }