在rules中能否指定两个attribute公用一个validator?

public function rules()

{

return array(

array(‘user_name,email’,‘validateUserAndEmail’),

这样会针对user_name,email各调用一次validateUserAndEmail,总共两次

我想对用户名和邮件一起调用一次validateUserAndEmail,也就是总共1次。

这个,不会吧。饭要一口一口吃,这两个属性是不同的,怎么能一次性调用?即使你一次性调用了,执行的时候,程序不是还要执行两遍??一次性调用为的什么?性能?

是啊,我就是为了提高性能,比如说

public function rules()

{

return array(

array(‘user_name,email’,‘validateUserAndEmail’),

public function validateUserAndEmail($attribute,$params)

{

    $this->user = User::model()->find(array(


			'condition'=>"user_name=:user_name and email=:email",


			'params'=>array(


				':user_name'=>$this->user_name,


				':email'=>$this->email)));


if (null === $this->user) {


	$this->addError('user_name','用户名及邮件地址的组合不存在');


	return;

}


这样我想一个函数,一个select就验证两个attribute

但如果没有把email声明道rules里面它就不能massive assignment

不知道各位在面对这种问题是怎么处理的

有一个比较婉转的方法,就是你要在自己的方法里面解析一下。

在rules里面,用连接符号将user_name和email连接起来




return array(

array('user_name-email','validateUserAndEmail'),

...



然后在你的validateUserAndEmail里面先拆分字符串




public function validateUserAndEmail($attribute,$params)

{

  $arr = explode('-', $attribute);

  $userName = $arr[0];

  $email = $arr[1];

  //......



不知道这样会有什么其它影响~~估计是不行的。 :P

我说下现在的做法,不知道这样好不好,各位指点下

rules数组

array(‘user_name’,‘validateUserAndEmail’,‘on’=>‘reactivate’),

array(‘email’,‘safe’),

public function validateUserAndEmail($attribute,$params)

{

$this->user = User::model()->find(array(

‘condition’=>“user_name=:user_name and email=:email”,

‘params’=>array(

‘:user_name’=>$this->user_name,

‘:email’=>$this->email)));

if (null === $this->user) {

$this->addError(‘user_name’,‘用户名及邮件地址的组合不存在’);

return;

}