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;
我有两个直接一对一相关的 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;