蛋蛋的蛋 2018-04-17 12:38:42 3638次浏览 11条回复 0 0 0
    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了,根本不能取值判断。

不知道咋取,求大大指点下

  • 回复于 2018-04-17 16:03 举报

    你可以试试['name','unique','targetClass'=>function($model){return $model->a==1?'app\models\User2':'app\models\User'}]

  • 回复于 2018-04-18 07:29 举报

    1.png
    不行呀 ,大大 报错了
    rrr4.png

  • 回复于 2018-04-18 07:32 举报

    qwe9.png
    打印model 也是报 Call to undefined method Closure::getDb()

  • 回复于 2018-04-18 08:10 举报

    错误信息看了没

  • 回复于 2018-04-18 08:10 举报

    自己解决了
    `['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 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 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
    

    `

  • 回复于 2018-04-18 08:17 举报

    前面2楼给的


    要把targetclass换成 when 才能打印出数组,
    但是那样他又去找getdb方法了,

    既然那样就把上面规则里面判断舍掉了。
    直接在方法里面切换好了,

    谢谢2楼 大大的回复

  • 回复于 2018-04-18 10:23 举报

    你这里的问题是没有理解什么是model,
    model的public $q 是啥,
    他只是model的一个变量,如果你没有有在他的基类model里面有过数据结构的hasOne或hasMayn在extraFilds的情况下,他这变量哪来的值。
    还有一个就是作用域的问题,就算是你前面规则写的是自定义验证,你的作用域就不对。
    还有好多问题,因为从代码上看,会出现出很多理解性问题。

    就你这需求而言,是我来做,我就会重构user这一块用户统一接口,直接出一个API。就像以前discuz里面的用户接口一路。哪个应用都可以接入授权。

    而如果不这样用,具体处理问题起来也有很多方法getDb那处理就是一个方法,还有就是在model这个模型类里的自定义验证处看接use user2这个表去定义一个验证规则就行。而这个user2哪来,你自已重写他的getDb

    这话题会衍生出如何重构的问题,是一个结构性问题,并不是单单语言上的问题。设计模式问题。
    我就装个逼,要讲下去可以讲一天了。

    1 条回复
    回复于 2018-04-18 18:26 回复

    我怎么觉得这个, 表单提交来的成员变量,不在 规则里面过滤一遍,是得不到值的
    现在我是实现了。啥啥接口的,对我来说还是复杂了,毕竟我的水平就自学半桶水,英文都看不懂,

  • 回复于 2018-04-18 13:57 举报

    板凳都搬来了,你就装个逼?

    3 条回复
    回复于 2018-04-18 17:44 回复

    你啥意思,每个回复都来搅屎棍下。

    回复于 2018-04-19 12:01 回复

    一个个都嫌的蛋疼

    回复于 2018-04-19 12:01 回复

    一个个都嫌的蛋疼

  • 回复于 2018-04-18 18:30 举报

    现在有个问题又来了,

    为啥 注册成功了,信息塞到cookie里面报错呢

    11.png

    22.png

  • 回复于 2018-04-18 18:56 举报

    娃娃.png

    返回这些数组

  • 回复于 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();
    }
    
您需要登录后才可以回复。登录 | 立即注册