问个PhpStrom IDE的问题。 [ 2.0 版本 ]
自定的 Yii::$app->user->identity->get***()
方法在编辑器里找不到定义,这些方法是挂载在 登陆的 User model里了。
最佳答案
-
或者你可以使用user 的关联模型自定义方法。例如User模型里定义了hasOne关联Store表。那么可以在Store模型里自定义方法,然后调用方式这样:
Yii::$app->user->identity->store->自定义方法()
Yii::$app
是应用的实例,调用组件的。例如Yii::$app->user
是当前应用调用user组件
user 是模型
identity 是定义的接口也就是user模型必须要实现的接口,因为在调用login时注入进入的必须是IdentityInterface
,
最后返回的是关联的user对象(但是这个关联对象必须要实现接口)
store 是user的关联对象返回的是store对象
自定义方法()是store里面的一个函数,那可以可以store->自定义方法()调用了讲解一下identity ,identity是身份的意思。是在登录的时候存储用户身份信息。那它是怎么存储的呢?
Yii::$app->user的关联对象identity
Yii::$app
这个都知道了吧,就是Yii应用实例Yii::$app->user
是当前应用调用user组件(前面已经说了)
那它怎么怎么知道去调用user组件?因为在main.conf配置的:'user' => [ 'identityClass' => '\Common\Models\User', 'enableAutoLogin' => true, 'enableSession' => false, 'loginUrl' => null, ],
仔细看发现了identity 这个词。但是他的全称是identityClass 这里定义的是身份验证信息调用使用的类是\Common\Models\User,也就是你的User模型,但是这个User模型时有要求的,必须实现implements IdentityInterface接口。然后程序运行后,会自动注册user组件(注册的是vendor/yiisoft/yii2/web/User.php)而不是你config配置的user,Config配置的user只是用来获取关联对象,然后可以这样使用了Yii::$app->user->identity ,但是执行identity的时候实际没有这个方法,应该会报错的,Yii使用了PHP的机制会去尝试执行getIdentity()。
上面说了,user是 vendor/yiisoft/yii2/web/User.php的组件,那么user->identity肯定是在vendor/yiisoft/yii2/web/User.php下面找是不是有getIdentity()。如果没找到,我直播吃翔。。。然后在看 $this->renewAuthStatus();这个就是给identity复制user对象数据。
注意这两行:$class = $this->identityClass; //这个就是config里定义identityClass对应的的类(自己定义的user模型类) $identity = $class::findIdentity($id); //这个就是调用模型类里的方法findIdentity获取用户信息
这个findIdentity方法其实是接口 IdentityInterface 的具体实现。 (你可以试试点击鼠标进入这个findIdentity方法)他会跳到IdentityInterface接口里。所以说
Yii::$app->user->identity->你写的方法()
执行不了。因为你要在接口里定义.
其他 1 个回答
-
因为
Yii::$app->user->identity
是实现IdentityInterface
接口的。是使用IdentityInterface
接口的契约规定,public function login(IdentityInterface $identity, $duration = 0){}
传入的identity这个就是user查询结果对象,但是这个对象要符合依赖注入的规定。而你的User model 里自定义了一个放,但是这个方法只是你model里的。登录后不会注册到这个方法,因为这个方法不符合
login(IdentityInterface $identit)
这个规定,它接收的是一个接口,你的Model要实现这个接口,也就是说,你要在接口里定义好方法,然后在user模型里写方法的具体实现。这样才能使用Yii::$app->user->identity->get***()
共 1 条回复
小叮当的肚兜
最后登录:11小时前
在线时长:97小时45分
- 粉丝13
- 金钱44030
- 威望270
- 积分47700