YII2 刷新网页时验证码不刷新

红石头 发布于 2015/12/31 13:59
阅读 581
收藏 0
Yii


第一种方法(失败):

public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => substr(str_shuffle('ABCDEFGHJKMNPQRSTUVWXY3456789'),0,6), // 修改这里的值,确实可以刷新页面的时候改变验证码,但是 Session 里面没有对应的值...啊啊啊啊啊啊啊啊啊
                'maxLength' => 6, //最大显示个数
                'minLength' => 5,//最少显示个数
                'padding' => 0,//间距
                'height'=>40,//高度
                'width' => 130,  //宽度
                'offset'=>-2,        //设置字符偏移量 有效果
            ],
        ];
    }
1,


第二种方法(失败):重写 yii\captcha\CaptchaAction 里面的run方法, 还是出现和第一种方法一样的问题 session 里面没值

<?php
namespace common\componets;
/**
 * 重写验证码
 * @package common\componets
 */
use Yii;
use yii\base\Action;
use yii\base\InvalidConfigException;
use yii\helpers\Url;
use yii\web\Response;

class Mycaptcha extends \yii\captcha\CaptchaAction
{
	public function run()
	{
		if (Yii::$app->request->getQueryParam(self::REFRESH_GET_VAR) !== null) {
			// AJAX request for regenerating code
			$code = $this->getVerifyCode(true);
			Yii::$app->response->format = Response::FORMAT_JSON;
			return [
				'hash1' => $this->generateValidationHash($code),
				'hash2' => $this->generateValidationHash(strtolower($code)),
				// we add a random 'v' parameter so that FireFox can refresh the image
				// when src attribute of image tag is changed
				'url' => Url::to([$this->id, 'v' => uniqid()]),
			];
		} else {
			$this->setHttpHeaders();
			Yii::$app->response->format = Response::FORMAT_RAW;
			return $this->renderImage($this->getVerifyCode(true));
		}
	}
}








第三种方法(成功),网上大部分都是这个解决方案,修改 vendor\yiisoft\yii2\captcha\CaptchaAction.php 里面的源代码,

如下图:

这个方法确实可以达到要求,但一般情况,验证码这样基本功能都需要动到源代码的话,

会不会感觉这个框架有点弱?

加载中
返回顶部
顶部