崩盘砖家 2011-05-09 15:15:25 11865次浏览 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,比如当我只想验证用户名,但却同时验证了密码

  • 回复于 2013-11-01 14:32 举报

    翻出来这篇文章,但是感觉依旧不能解决我的问题,想继续追问一二

    1,砖家所说的js里编写自己需要提交验证的内容,这个是在view里面去写么?

    2,如果我的需求是用户名输入框失去焦点是提交POST验证用户名,密码输入框失去焦点时提交验证密码该怎么去做?是沿用以前的开发方式自己写js代码来做么?如果使用widget能否快速达到这个要求?

    本人是新手,所以请大牛赐教

  • 回复于 2012-07-05 14:23 举报

    :lol嘿嘿,不错啊

  • 回复于 2012-06-21 14:04 举报

    受教了,学习了!崇拜

  • 回复于 2012-06-20 16:44 举报

    晕!没看懂啊:L

  • 回复于 2012-06-20 10:42 举报

    弄了这么多,就是一个方法的参数问题。:lol
    学习了!

  • 回复于 2012-06-15 22:02 举报

    不错,我也要用这个,舰长V5

  • 回复于 2012-03-18 21:41 举报

    楼主是男是女,极品优质男,求对象一枚!!

  • 回复于 2011-06-24 17:41 举报

    。。。。。。。。。。。。。。。。。。学习了!

  • 回复于 2011-06-23 15:43 举报

    看懂了,,,

  • 回复于 2011-05-10 10:32 举报

    的确,受教阿....多谢多谢

  • 回复于 2011-05-09 16:02 举报

    楼主威武,理解的很透彻,好邪恶,好强大哦!

  • 回复于 2011-05-09 16:00 举报

    意思就是php写好后就不管了
    js想怎么ajax验证是js的事
    如果只验证用户名,需要post变量 :

    $_POST['ajaxValidate']='username'
    

    如果只验证captcha,需要post变量 :

    $_POST['ajaxValidate']='captcha'
    

    如果想全部验证,就

    $_POST['ajaxValidate']='captcha,username,password,autoLogin'
    
  • 回复于 2011-05-09 15:56 举报

    好邪恶,,好强大啊!

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

    晕了几天的问题终于在舰长的指导下解决了

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

    太高端....的确看不懂

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

    你看一下blog程序的标签管理,就是这个意思。

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

    哦哦哦!!!,就是,怎么我这几天都没想到这个

    但是怎么和js端指定一个协议好呢?

    比如规定
    $_POST['ajaxValidate']='要验证的attr,以英文逗号分隔'
    这样php端判断ajax验证的时候对$_POST['ajaxValidate']进行处理,生成attributes(要验证的attr)

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

    validate($models, $attributes=null)
    第二个参数你可以写上你要验证的属性

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

    不知道问题描述,大家清楚了没有?

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

    可以看看CActiveForm::validate的源代码,在CActiveForm::validate方法中,对当前场景的所有attributes进行了验证

    public static function validate($models, $attributes=null, $loadInput=true)
    {
      $result=array();
      if(!is_array($models))
      $models=array($models);
      foreach($models as $model)
      {
        if($loadInput && isset($_POST[get_class($model)]))
        $model->attributes=$_POST[get_class($model)];
        $model->validate($attributes);
        foreach($model->getErrors() as $attribute=>$errors)
        result[CHtml::activeId($model,$attribute)]=$errors;
      }
      return function_exists('json_encode') ? json_encode($result) : CJSON::encode($result);
    }
    

    现在进行username的ajax验证,
    当调用echo CActiveForm::validate($loginModel);进行ajax验证的时候,会将('username','password','autoLogin','verifyCode')这4个attr进行验证,返回的时候,js只取'username'的验证结果

您需要登录后才可以回复。登录 | 立即注册