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’),
这样会针对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];
//......
不知道这样会有什么其它影响~~估计是不行的。
我说下现在的做法,不知道这样好不好,各位指点下
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;
}