崩盘砖家
- 崩盘砖家 回复了话题 newbie: svn管理yii项目代码问题
你不应该修改框架代码,应该在protected目录中继承框架内部类,这样即使框架源码升级了你的代码基本不需要改动
意思就是php写好后就不管了
js想怎么ajax验证是js的事
如果只验证用户名,需要post变量 :$_POST['ajaxValidate']='username'
如果只验证captcha,需要post变量 :
$_POST['ajaxValidate']='captcha'
如果想全部验证,就
$_POST['ajaxValidate']='captcha,username,password,autoLogin'
晕了几天的问题终于在舰长的指导下解决了
哦哦哦!!!,就是,怎么我这几天都没想到这个
但是怎么和js端指定一个协议好呢?
比如规定
$_POST['ajaxValidate']='要验证的attr,以英文逗号分隔'
这样php端判断ajax验证的时候对$_POST['ajaxValidate']进行处理,生成attributes(要验证的attr)不知道问题描述,大家清楚了没有?
可以看看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'的验证结果可能我没描述清楚,我重新说下
以登录为例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的验证结果$this->open是做什么用的?