2012-06-26 65 views
3

我想在我的Yii項目上創建一個AJAX註冊表單。所以在每個頁面上我都有一個登錄按鈕,如果用戶沒有被授權,它將顯示一個彈出窗口。在該彈出窗口中,他可以看到帶有電子郵件字段,密碼字段和CAPTCHA(默認Yii驗證碼)的註冊表單。Yii CAPTCHA網址被破壞

因此,我的用戶註冊模型是User。有一個驗證規則:

array('code', 'captcha', 'allowEmpty'=>!Yii::app()->user->isGuest), 

我的控制器,所有用戶的操作,是用戶(網址:site.url /用戶/)和我說有驗證碼的行動:

'captcha'=>array(
    'class'=>'CCaptchaAction', 
    'backColor'=>0xFFFFFF, 
    'foreColor'=>0x000000, 
), 

在我下一個代碼:

$this->widget('CCaptcha', array(
    'clickableImage' => true, 
    'showRefreshButton' => false, 
)) 

這裏是一個問題:(作爲一個彈出窗口,其可在每一頁上被顯示(索引頁,例如,屬於主控制器)內的captcha想要從該控制器加載圖像(從/ main /驗證碼,而不是/用戶/驗證碼)。

在每個控制器添加驗證碼是壞主意,所以我加了

'captchaAction' => '/user/captcha', 

但在那之後的captcha想從URL加載

http://site.loc/user/captcha/v/4fe99aca1bbed 

用戶友好的URL墜毀驗證碼,我可以」避免它(因爲我認爲,不是一個Yii專家,這是因爲共同的路徑配置)。

有沒有簡單的解決方案來解決這個問題?我應該修復URL還是重新配置CAPTCHA?

回答

3

所以,當我在等待幫助,我自己:) 解決了這個問題在我的項目我分開我的控制器進入下一個層次:

/frontend 
/backend 

對於普通用戶所有控制器(當然)在前端部分,包括UserController和MainController。

是的,我寫了一些CONFIGS隱藏/前端/ URL中的是這樣的:

'<c:\w+>/<a:\w+>' => 'frontend/<c>/<a>', 

,我確信,在我的CAPTCHA配置( 'captchaAction'=> '/用戶/驗證碼' 這個字符串)知道去哪裏(而且幾乎是這樣!),但是不!

我應該寫完整路徑到我的控制器和動作像如下:

'captchaAction' => '/frontend/main/captcha', 

正如我在質詢時說,我放在UserController中我的CAPTCHA行動,但現在你可以看到它位於MainController(我從UserController的)

刪除它,我得到了一個錯誤:

CCaptchaValidator.action "captcha" is invalid. Unable to find such an action in the current controller. 

因此,要解決這個問題,我不得不使用CCAP的屬性captchaAction tchaValidator在我的用戶模型!代碼:

array('code', 'captcha', 'captchaAction'=>'/frontend/main/captcha', 'allowEmpty'=>!Yii::app()->user->isGuest) 

所以,現在我的AJAX驗證碼驗證,我想正常工作。

與Yii的默認CAPTCHA祝好運,親愛的社區!

+0

它可以接受你自己的答案,如果你願意 –

+1

我需要等待幾個小時之前,那麼我會做 – Apfel

+0

pfff,對驗證碼的許多變化。有人可以幫助我嗎?stackoverflow.com/questions/28325213/yii-captcha-validation-check-does-not-work –