** 分别MVC 三部分来看怎么实现yii2自带的验证码。 **
** Model **
class LoginForm extends Model
{
public $username;
public $password;
public $rememberMe = true;
public $verify;
private $_user;
/**
* @inheritdoc
*/
public function rules()
{
return [
// username and password are both required
[['username', 'password'], 'required'],
// rememberMe must be a boolean value
['rememberMe', 'boolean'],
// password is validated by validatePassword()
['password', 'validatePassword'],
['verify', 'captcha', 'captchaAction'=>'site/captcha'],
];
}
}
可以看到只要在rules中添加
['verify', 'captcha', 'captchaAction'=>'site/captcha'],
** View **
$form->field($model,'verify')->widget(Captcha::className(),[
'captchaAction'=>'site/captcha',
'imageOptions'=>[
'alt'=>'刷新',
'title'=>'刷新',
'style'=>'cursor:pointer; display:inline'
],
'template' => '<div class="col-lg-7" style="padding: 0;">{input}</div><div class="col-lg-5" style="padding: 0; text-align: right">{image}</div><div class="clearfix"></div>',
'options' => [
'placeholder' => '输入验证码',
'class' => 'form-control'
]
])->label(false);
** Controller **
/**
* @inheritdoc
*/
public function actions()
{
return [
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'backColor'=>0xffffff,//背景颜色
'maxLength' => 6, //最大显示个数
'minLength' => 5,//最少显示个数
'padding' => 5,//间距
'height'=>34,//高度
'width' => 120, //宽度
'foreColor'=>0x000000, //字体颜色
'offset'=>4, //设置字符偏移量 有效果
],
];
}
在控制器中加入公用的captcha,这是一个action
** 注意**
整个配置其实是一个很简单的过程,yii2已经帮我实现好了actionCaptcha, 这个action中包含了验证码生成,图片生成,验证码验证的操作,我们只需要在actions中引入这个actionCaptcha, 同时在Model的验证码验证中,将验证方法指向该控制器下面的captcha,同时在View中注意验证提交的地址即可。
整个处理流程类似处理普通的action,只是actionCaptcha 集成了较多功能的可用其他controller而已。