yii2自帶的例子里面有一個關(guān)于驗證碼的使用例子,但是本篇文章討論的是用另外一種方式手動生成和驗證驗證碼。
生成驗證碼
在要使用驗證碼的Controller里面實現(xiàn)actions方法:
class TestController extends Controller{
public function actions(){
return [
'captchatest' => [
'class' => 'yii\captcha\CaptchaAction',
'maxLength' => 4, //生成的驗證碼最大長度
'minLength' => 4 //生成的驗證碼最短長度
]
];
}
}
以上代碼通過實現(xiàn)actions方法創(chuàng)建了一個叫captchatest的action,上面的action我只填了兩個參數(shù),還有其他參數(shù)可以參考yii\captcha\CaptchaAction的publish屬性
在頁面中使用驗證碼
在要使用驗證碼的view里面插入以下代碼:
<?php echo Captcha::widget(['name'=>'captchaimg','captchaAction'=>'captchatest','imageOptions'=>['id'=>'captchaimg', 'title'=>'換一個', 'alt'=>'換一個', 'style'=>'cursor:pointer;margin-top:10px; height: 22px;'],'template'=>'{image}']); ?>
以上代碼主要需要正確填寫captchaAction,填寫你剛才創(chuàng)建的captchaAction,需要完整的namespace,然后會生成一個img
驗證驗證碼
在action中接收到表單傳來的驗證碼后,使用:
$this->createAction('captchatest')->validate($captchCode, false); //$captchCode為用戶輸入的驗證碼
validate函數(shù)會返回true/false,該函數(shù)的第二個參數(shù)為是否對大小寫敏感
刷新驗證碼
生成的驗證碼有時用戶看不清楚,需要重新刷新,可以使用該圖片的url加上refresh參數(shù),然后會返回一個json數(shù)據(jù),其中有一個url的屬性,調(diào)用該url即可獲取新驗證碼,如圖片地址為:/index.php?r=test%2Fcaptchatest&v=5680ce41e9cb0,獲取圖片地址為:/index.php?r=feedback%2Fcaptchafeedback&v=5680ce41e9cb0&refresh=1