YII2 rules规则里面的参数要怎么取 [ 求助交流 ]
public $q;//注册数据库1是A库,2是B库
public $name;//账号
public function rules()
{
// echo $this->uniques();
// echo $this->q;
return [
['name', 'unique', 'targetClass' =>'app\models\User2', 'message' => '账号已被注册'],
//['name', 'unique', 'targetClass' =>$this->uniques(), 'message' => '账号已被注册'],
//['name', 'unique', 'targetClass' =>(q==1?app\models\User:app\models\User2), 'message' => '账号已被注册'],
];
}
public function uniques(){
if ($this->q==1){
$a='app\models\User';
}elseif ($this->q==2){
$a='app\models\User';
}
return $a;
}
打印方法返回的内容也不行,打印成员变量也报错
我应该怎么取$this->q的值, 就是想实现不同数据库之间的帐号唯一验证
'targetClass' =>'app\models\User2'
这句话 'targetClass' =>'app\models\User2'根据传来的参数做出不同的改变,
要么 'targetClass' =>'app\models\User2' 要么 'targetClass' =>'app\models\User‘’
现就是在那个方法里面echo $this->q 直接就error了,根本不能取值判断。
不知道咋取,求大大指点下
共 11 条回复
-
liangkaixin 回复于 2018-04-17 16:03 举报
你可以试试['name','unique','targetClass'=>function($model){return $model->a==1?'app\models\User2':'app\models\User'}]
-
自己解决了
`['name','unique','targetAttribute' => 'name',],public static function getDb(){ $user = new User();//自己加条件判断切换uesr2 return $user->getDb(); } public static function find(){ $user = new User();//自己加条件判断切换uesr2 return $user->find(); }
180418 0:12:06 72 Connect root@localhost on aaa
72 Query SET NAMES 'utf8' 72 Query SELECT EXISTS(SELECT * FROM `account` WHERE `name`='3333') 72 Query SELECT EXISTS(SELECT * FROM `account` WHERE `name`='3333') 72 Quit
180418 0:12:13 73 Connect root@localhost on bbb
73 Query SET NAMES 'utf8' 73 Query SELECT EXISTS(SELECT * FROM `account` WHERE `name`='3333') 73 Query SELECT EXISTS(SELECT * FROM `account` WHERE `name`='3333') 73 Quit
`
-
前面2楼给的
要把targetclass换成 when 才能打印出数组,
但是那样他又去找getdb方法了,既然那样就把上面规则里面判断舍掉了。
直接在方法里面切换好了,谢谢2楼@liangkaixin 大大的回复
-
你这里的问题是没有理解什么是model,
model的public $q 是啥,
他只是model的一个变量,如果你没有有在他的基类model里面有过数据结构的hasOne或hasMayn在extraFilds的情况下,他这变量哪来的值。
还有一个就是作用域的问题,就算是你前面规则写的是自定义验证,你的作用域就不对。
还有好多问题,因为从代码上看,会出现出很多理解性问题。就你这需求而言,是我来做,我就会重构user这一块用户统一接口,直接出一个API。就像以前discuz里面的用户接口一路。哪个应用都可以接入授权。
而如果不这样用,具体处理问题起来也有很多方法getDb那处理就是一个方法,还有就是在model这个模型类里的自定义验证处看接use user2这个表去定义一个验证规则就行。而这个user2哪来,你自已重写他的getDb
这话题会衍生出如何重构的问题,是一个结构性问题,并不是单单语言上的问题。设计模式问题。
我就装个逼,要讲下去可以讲一天了。共 1 条回复 -
paopao2hao 回复于 2018-04-27 10:53 举报
public static function getDb(){ $user = new User();//自己加条件判断切换uesr2 return $user->getDb(); } public static function find(){ $user = new User();//自己加条件判断切换uesr2 return $user->find(); }
蛋蛋的蛋
最后登录:2024-03-11
在线时长:34小时29分
- 粉丝4
- 金钱64
- 威望20
- 积分604