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

时间:2016-02-05 20:17:06

标签: php yii2

我在layout / main.php中有这段代码:

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

我不能'从$this->params['Type']以外的任何控制器访问SiteController。如果我使用任何其他控制器导航,我会收到此错误:

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

如果我在每个控制器中复制了我的查询,那么效果很好。但我不想这样做。如何仅在backend全局制作?

2 个答案:

答案 0 :(得分:2)

如何使用session

$session = new \yii\web\Session;
$session->open();
$value1 = $session['name1'];  // get session variable 'name1'
$value2 = $session['name2'];  // get session variable 'name2'
foreach ($session as $name => $value) // traverse all session variables
$session['name3'] = $value3;  // set session variable 'name3'

有关详细信息,请参阅docs

答案 1 :(得分:2)

你可以通过

成功地完成这项工作(没有明确的会话编码)

在您的模型中(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);
        }
    }

现在如果用户已成功登录,则全局使用所有这些属性(通过项目,例如在模型,视图控制器中)

例如

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;