Yii 內(nèi)置的 Captcha 基本上可以滿足大部分需求,如果你對驗證碼有特殊要求,你可以自定義 Captcha,這主要是通過擴展 CCaptchaAction 來實現(xiàn)的,本例自定義一個驗證碼功能,隨機產(chǎn)生 10 以內(nèi)的加減法,用戶需要計算出正確的結(jié)果才能通過驗證。
本例基于上例 Yii Framework 開發(fā)教程(20) UI 組件 Captcha 示例,做如下修改 首先在 protected/components 目錄下創(chuàng)建一個 MathCaptchaAction,重載 generateVerifyCode, renderImage 等方法:
class MathCaptchaAction extends CCaptchaAction
{
protected function generateVerifyCode()
{
return mt_rand((int)$this->minLength,
(int)$this->maxLength);
}
public function renderImage($code)
{
parent::renderImage($this->getText($code));
}
protected function getText($code)
{
$code=(int)$code;
$rand=mt_rand(1,$code-1);
$op=mt_rand(0,1);
if($op)
{
return $code-$rand. '+' . $rand;
}else
{
return $code+$rand. '-' . $rand;
}
}
}
然后修改 iteController 的 rules 使用新創(chuàng)建的 MathCaptchaAction
public function actions()
{
return array(
'captcha'=>array(
'class' => 'MathCaptchaAction',
'minLength' => 1,
'maxLength' => 10,
));
}
http://wiki.jikexueyuan.com/project/yii-development-tutorial/images/21.1.jpg" alt="picture21.1" />
本例下載