dongtan1009 2016-02-05 20:17
浏览 1236
已采纳

在所有后端Yii2全局设置参数变量

I have this code in layout/main.php:

    $userId = Yii::$app->user->id;
    $data = User::find()->where('id ="'.$userId.'"')->one();
    $type = $data['type'];
    Yii::$app->view->params['Type'] = $type;

I cant' access $this->params['Type'] from any controller except SiteController. If I navigated using any another controller i got this error:

 PHP Notice – yii\base\ErrorException
 Undefined index: Type

If I duplicated my query in every controller, It works well. But I don't want to do that. How to make it globally at the backend only?

  • 写回答

2条回答 默认 最新

  • doumi1884 2016-02-05 21:53
    关注

    You can definitely accomplish this (without explicitly session coding) successfully by

    In your model (User.php)

        /**
         * @inheritdoc
         */
        public static function findIdentity($id)
        {
            // return isset(self::$users[$id]) ? new static(self::$users[$id]) : null;
            $User = static::findOne(['id'=>$id]);
            if(!$User)
            {
                return null;
            }
            else
            {
                $dbUser = 
                [
                    'id' => $User->id,
                    'image'=>$User->image,
                    'type'=>$User->type,
                    // 'usertype'=>$User->user_type, set other attributes too
                    'username' => $User->username,
                    'first_name' => $User->first_name,
                    'last_name' => $User->last_name,
                    'email' => $User->email,
                ];
                return new static($dbUser);
            }
        }
    

    Now if the user has logged in successfully, then you use all this attributes globally (through out the project For eg in model, view controller) by

    For eg

    echo Yii::$app->user->identity->id;
    echo Yii::$app->user->identity->image;
    echo Yii::$app->user->identity->type;
    echo Yii::$app->user->identity->username;
    echo Yii::$app->user->identity->frst_name;
    echo Yii::$app->user->identity->last_name;
    echo Yii::$app->user->identity->email;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况