zhb1875

zhb1875

这家伙有点懒,还没写个性签名!

  • 财富值

    1340

  • 威望值

    50

  • 总积分

    2220

个人信息

  • 发表了说说
    平时都是按过程开发么?只有做架构设计的时候才用面向对象?
    7小时前浏览(3) | 回复(0)
  • 赞了说说

    我要一个拥有八块腹肌的程序员0.0

    7小时前查看
  • 2018-05-23 已签到
    连续签到1天,获得了5个金钱
    7小时前
  • 应该是可以的,twig模板就实现了这个功能 在main.php配置: `` 'globals' => [

                        'html' => '\yii\helpers\Html',
                        'urlHelper' => '\Anlewo\Common\helpers\Url',
                        'LinkPager' => '\yii\widgets\LinkPager',
                        'ArrayHelper' => 'yii\helpers\ArrayHelper',
                        ]
    

    `` 然后模板里就直接可以使用html::xxxx了,而且是可以在任何模板里

    2天前查看
  • 2018-05-21 已签到
    连续签到1天,获得了5个金钱
    2天前
  • 或者你可以使用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->你写的方法()执行不了。因为你要在接口里定义.

    2018-05-19 11:59查看
  • 因为 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***()

    2018-05-19 11:20查看
  • 2018-05-19 已签到
    连续签到1天,获得了5个金钱
    2018-05-19 09:01

总监

等级规则
2220/500044.4% Complete

资料完整度

10/10010% Complete

用户活跃度

0/1000% Complete

Ta的关注

6

Ta的粉丝

19

Ta的访客

63