總共分爲三個方面:控制器配置、模型rules配置和視圖配置。php
第一步:控制器配置windows
將下列代碼配置在actions中,請求驗證碼連接對應爲 「控制器/captcha」緩存
'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', // 'backColor'=>0x000000,//背景顏色 'maxLength' => 4, //最大顯示個數 'minLength' => 4,//最少顯示個數 'padding' => 5,//間距 'height'=>45,//高度 'width' => 75, //寬度 // 'foreColor'=>0xffffff, //字體顏色 'offset'=>4, ],
第二步:模型rules配置,即驗證配置。框架
首先聲明公共變量 yii
public $verifyCode
其次在rules方法中配置驗證字體
['verifyCode', 'captcha','captchaAction'=>'user/captcha','on' => ['login']]
在這條配置中的"captchaAction"加入了配置,即控制器的路由,若是不進行配置的話會走site/captcha的路由,這是框架樣例的路由。編碼
第三步:視圖中的配置orm
在ActiveForm中加入以下代碼便可了blog
<?= $form->field($model,'verifyCode')->widget( Captcha::className(), [ 'template' => '{image}{input}', 'captchaAction'=>'user/captcha', // 此注意要使用本身配置的那個控制器驗證碼路由 'imageOptions'=>[ 'style'=>'cursor:pointer;width:77px'] ] )
最後有一個巨坑的問題:因爲編碼過程當中使用了一些windows下的換行符或者空格,致使了未知的輸出,會致使驗證碼圖片不可以正常的生成。圖片
這是須要在CaptchaAction類中的renderImageByGD方法中加入以下代碼:
imagecolordeallocate($image, $foreColor); ob_clean(); // 此行爲插入代碼,目的是清空緩存區爲輸出圖片提供乾淨空間。 ob_start(); imagepng($image); imagedestroy($image);