Yii2 如何创建一个全局可访问的变量,将用户的 id 转换为员工的 id

Yii2 How to create a globally accessible variable that converts user's id to employee's id

我有两个直接一对一相关的 table。一个是标准的 Yii2 用户 table(为清楚起见,此处使用缩写字段列表),另一个是包含 user_id 的员工 table。我如何创建一个全局可访问的变量(以及访问员工 ID 的实际代码),我可以在我的应用程序中的任何地方使用它,它会给我登录用户的员工 ID,我将如何调用该变量?我希望我可以说我已经尝试了一些东西,但不幸的是我对 Yii2 比较陌生,不知道从哪里开始使用这样的全局变量。感谢您的帮助。

用户table:
编号
用户名
密码
等等

员工table:
编号
user_id(与用户一对一相关table)

员工模型:

<?php

namespace frontend\models\base;

use Yii;

/**
 * This is the base model class for table "employee".
 *
 * @property integer $id
 * @property integer $user_id

 *
 * @property \common\models\User $user
 */
 class Employee extends \yii\db\ActiveRecord
{
public function rules()
{
    return [
        [['user_id', 'required'],
        [['user_id'], 'integer'],
        [['user_id'], 'unique']
    ];
}

public static function tableName()
{
    return 'employee';
}

public function attributeLabels()
{
    return [
        'id' => Yii::t('app', 'ID'),
        'user_id' => Yii::t('app', 'User ID'),
    ];
}

/**
 * @return \yii\db\ActiveQuery
 */
public function getUser()
{
    return $this->hasOne(\common\models\User::className(), ['id' => 'user_id']);
}
}

一个很简单的方法就是使用$param数组

您可以在

中初始配置默认值
your_App\config\param.php  

并使用

访问
\Yii::$app->params['your_param_key']

查看您的 Employee 模型(对我而言)您不需要全局变量,您可以简单地使用 getUser

  $myUser = Employee::user();

但您需要可以使用

分配的参数
  \Yii::$app->params['my_user'] = Employee::user();

或用户

  \Yii::$app->params['my_user'] =  Yii::$app->user->id

或从 table

中检索与实际用户相关的模型
$myEmpModel  =  Employee::find()->where['user_id' =>  Yii::$app->user->id]->one(); 

我认为正确的方法是在您的 User 模型中使用关系。第一种方法是与 activerecord 的正确关系,第二种方法将使用上面定义的关系获取 id。所以您将在用户模型中添加这些方法:

/**
 * @return \yii\db\ActiveQuery
 */
public function getEmployee()
{
    return $this->hasOne(Employee::className(), ['user_id' => 'id']);
}

public function getEmployeeId()
{
    return $this->employee ? $this->employee->id : NULL; // set to NULL or anything you expect to be if record is not found
}

然后你就可以在你的应用程序的任何地方这样调用它了:

$employee_id = Yii::$app->user->identity->employeeid;

这只适用于 User 模型,因为它实现了 Identity,否则您需要先实例化模型 class,可以这样说:

$user_id = 5; // 5 is id of user record in DB
$user = User::findOne($user_id);
$employee_id = $user->employeeid;
// or using first of 2 relations ...
$employee_id = $user->employee->id;