Allener

Allener

这家伙有点懒,还没写个性签名!

  • 财富值245
  • 威望值10
  • 总积分395

个人信息

  • UserController.php中不应该使用__constrouct,因为会报如下错误“Call to a member function getUniqueId() on null”,应该使用public function init()来初始化。

  • 回复了 的回复

    请问下有没有关于如何重写YII自身类的教程?我想重写Yii验证码类的一个方法。谢谢

    是的,我就是这么写的,在basic目录创建了common目录,然后创建了Test类继承了yii\captcha\CaptchaAction,重写了validate方法

  • 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验证,就不进行再次验证了,直接提交表单的时候就可以通过了。

  • 2017-10-05 已签到
    连续签到1天,获得了5个金钱
见习主管 等级规则
395/500
资料完整度
10/100
用户活跃度
0/100

Ta的关注

2

Ta的粉丝

0

Ta的访客

4