我在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
全局制作?
答案 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;