Allener
UserController.php中不应该使用__constrouct,因为会报如下错误“Call to a member function getUniqueId() on null”,应该使用public function init()来初始化。
class Test extends CaptchaAction{ public function validate($input, $caseSensitive) { $code = $this->getVerifyCode(); $valid = $caseSensitive ? ($input === $code) : strcasecmp($input, $code) === 0; $session = Yii::$app->getSession(); $session->open(); $name = $this->getSessionKey() . 'count'; $session[$name] = $session[$name] + 1; return $valid; } }
这么写的,控制器的actions也写对了,因为如果改名了test就会报错不能显示图片。
'captcha' => [ 'class' => 'app\common\Test',
最后先ajax验证了验证码成功了,但是提交表单会进行第二次验证了就会报错。
if ($valid || $session[$name] > $this->testLimit && $this->testLimit > 0) { $this->getVerifyCode(true); }
这个if代码我没有添加在我重写的validate中,如果删除了源码的就不会重新验证了。
望您指教一二,是我重写错了吗?请问下有没有关于如何重写YII自身类的教程?我想重写Yii验证码类的一个方法。谢谢
继承yii的CaptchaAction,将这个validate方法重写一下,去掉验证成功重新获取验证码的那个条件,然后在你使用captcha的控制器中将captcha的class改为这个新建的CaptchaAction应该就可以了
public function actions() { return [ 'captcha' => [ **'class' => 'common\actions\CaptchaAction',** 'minLength' => 4, 'maxLength' => 4, 'transparent' => true, 'offset' => 8, 'padding' => 1, ], ]; }
请问如何重写YII自带的类方法?可否指点下?
ajax的post提交不管有没有form表单都需要_csrf,我用get就可以成功,post需要_csrf
` use yii\captcha\CaptchaAction;
if (Yii::$app->getRequest()->isAjax){ $data = Yii::$app->request->post(); $captcha_validate = new CaptchaAction('captcha', $this); if (isset($data['captcha']) && !$captcha_validate->validate($data['captcha'], false)){ //这是验证失败的 }else{ //验证成功! } }`
非常感谢您的这几行代码!
` use yii\captcha\CaptchaAction;
if (Yii::$app->getRequest()->isAjax){ $data = Yii::$app->request->post(); $captcha_validate = new CaptchaAction('captcha', $this); if (isset($data['captcha']) && !$captcha_validate->validate($data['captcha'], false)){ //这是验证失败的 }else{ //验证成功! } }`
如果只是这么写,那ajax验证正确,服务器进行第二次刷新,然后就提交表单的时候就会失败。
我将rules的规则
[ 'coder','captcha', 'captchaAction'=>'coder/captcha','message'=>"{attribute}错误"]
给删除了,已经用ajax验证,就不进行再次验证了,直接提交表单的时候就可以通过了。- Allener 2017-10-05 已签到连续签到1天,获得了5个金钱