崩盘砖家 2011-05-09 15:15:25 11921次浏览 27条回复 0 0 0

如题!!摆弄了很久找不到一个好办法,要代码少点,不重复写rules http://www.yiiframework.com/forum/index.php?/topic/19215-how-to-reuse-the-rules-defined-in-rules-in-ajax-validation/ 这是官网论坛的讨论 别人说是用CActiveForm::validate 即使是这样,在CActiveForm::validate中也会循环当前场景可用的rules,比如当我只想验证用户名,但却同时验证了密码

  • 回复于 2011-05-09 15:33 举报

    可能我没描述清楚,我重新说下
    以登录为例

    public function rules() {
      return array(
        array('username, password', 'required'),
        array('autoLogin', 'safe'),
        array('password', 'authenticate'),
        array('verifyCode','captcha','captchaAction'=>'public/captcha'),
      );
    }
    //
    这个rules如何以ajax方式进行验证?
    如果以CActiveForm的方式进行ajax验证
    
    if(isset($_POST['ajax']) && $_POST['ajax']==='login-form')
    {
      echo CActiveForm::validate($loginModel);
      Yii::app()->end();
    }
    

    注意,在CActiveForm::validate的过程中,即使js发送的ajax请求只验证username,
    但这种代码方式造成的结果是password,verifyCode同时被验证,虽然最后ajax需要的只是username的验证结果

  • 回复于 2011-05-09 15:31 举报

    砖家,解决问题了吗?

  • 回复于 2011-05-09 15:30 举报

    貌似很深奥阿,看得一知半解的,研究下去...

  • 回复于 2011-05-09 15:28 举报

    我只是给你个例子,你可以在afterValidate判断,把不需要验证的属性,用$this->clearErrors去掉提示。

  • 回复于 2011-05-09 15:27 举报

    你不用管这个,这是我数据表的一个字段

  • 回复于 2011-05-09 15:26 举报

    $this->open是做什么用的?

  • 回复于 2011-05-09 15:25 举报

    我遇过这种问题,可以在afterValidate()里用clearErrors()
    我给你个代码:

    public function afterValidate()
    {
      if($this->open)
        $this->clearErrors('back_time');
      else
        $this->clearErrors('open_time');
    }
    
您需要登录后才可以回复。登录 | 立即注册