关于yii中验证的问题

1.场景(scenario)多了怎么办?

项目中的user model,场景有10几个:注册,登录,修改用户基本资料,修改用户附属资料,修改用户密码,修改头像,修改用户隐私策略,修改用户tag,修改用户兴趣,爱好等等.

这么多场景(scenario)和验证(validation)交织在一起,觉得很混乱,CModel::rules函数很难写

2.验证(validation)不能用全局函数么??这样的话有很多验证要重复去写


比如User Model中,有对user_name的validation_rule

在其他model中,比如用户好友,博客作者用户名等Model中,还要重复的去写相应的验证规则

比如我要在项目中的很多model中写上规则

array(‘user_name’,‘match’,‘pattern’=>’/^[a-zA-Z0-9_]{4,16}$/u’,‘message’=>‘账号只能由4-16个字母,数字,下划线组成’),

这样的话比如以后验证策略变了,要求用户名只能是10个字符以内,就比较麻烦,要把项目中所有model中验证user_name的规则进行修改

[list=1]

[*]尽量不要用Model里面的rules,应该用Form里面的rules

[*]可以写自定义的validation,然后直接 array(‘user_name’,‘ext.your_validation’);

[/list]

1.据你所说的意思应该是你在每一个功能点上者应用了一个场景吧?我想应该没这个必要,设置场景一般为了区别于一般情况的验证,比如注册需要验证确认密码字段而其它情况下不需要验证这个字段,像这种情况就可以把“确认密码”这个字段的验证指定一个场景而其它的字段默认应用于所有的场景,不需要每一个能点上应用一个场景。

2.多个模型都要用到的验证规则可以自己写成一个验证类,然后在各个model的rule中去运用这个类

Form里面的rules。。。就是根据model里的rules判断

Form 是 Form,model 是 model,不同的。

当然,gii 生成的代码,是省略了 Form,直接拿 model 当 form 用,自然是 model 的 rules 判断了。