總共分為三個面向:控制器配置、模型rules配置和視圖配置。
第一步:控制器設定
將下列程式碼設定在actions中,請求驗證碼連結對應為 「控制器/captcha」。
'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', // 'backColor'=>0x000000,//背景颜色 'maxLength' => 4, //最大显示个数 'minLength' => 4,//最少显示个数 'padding' => 5,//间距 'height'=>45,//高度 'width' => 75, //宽度 // 'foreColor'=>0xffffff, //字体颜色 'offset'=>4, ],
第二步:模型rules配置,即驗證配置。
首先宣告公共變數
public $verifyCode
其次在rules方法中設定驗證
['verifyCode', 'captcha','captchaAction'=>'user/captcha','on' => ['login']]
在這條設定中的"captchaAction"加入了配置,即控制器的路由,如果不進行配置的話會走site/captcha的路由,這是框架範例的路由。
第三個步驟:視圖中的設定
在ActiveForm中加入以下程式碼:
<?= $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);
php中文網,大量的免費yii入門教學,歡迎線上學習!
以上是yii自備驗證碼怎麼做的詳細內容。更多資訊請關注PHP中文網其他相關文章!