我有一个'post'表,其中包含属性'user_id',以便知道谁发布了该帖子。我遇到一个问题,当创建一个帖子时,'user_id'没有添加到数据库中,这不能为null,所以我不能从那里继续。那么如何自动添加当前登录用户的“user_id”。
我正在使用Yii2基本模板。
由于
答案 0 :(得分:5)
或者您可以查看Blameable Behavior
BlameableBehavior使用当前用户ID自动填充指定的属性。
我在很多项目中使用它(通常与sluggable
和timeable
结合使用)并且易于使用,只需在Post模型中添加以下内容:
use yii\behaviors\BlameableBehavior;
public function behaviors()
{
return [
[
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'user_id',
'updatedByAttribute' => false,
'attributes' => [
ActiveRecord::EVENT_BEFORE_VALIDATE => ['user_id'] // If usr_id is required
]
],
];
}
在验证行为上引用Behavior validation。
如果您想像其他答案建议手动完成,则需要更改
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->id]);
}
到
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
$model->user_id = \Yii::$app->user->identity->id
$model->save()
return $this->redirect(['view', 'id' => $model->id]);
}
请记住:在输入用户ID之前验证时,您的模型规则中不需要user_id!
答案 1 :(得分:0)
你可以试试这段代码
//获取整个记录的用户数据
$user = \Yii::$app->user->identity;
//获取已登录用户的ID
$userId = \Yii::$app->user->identity->id
查看文档以获取更多详细信息:doc。
答案 2 :(得分:0)
除了Bloodhound的建议外,您还可以使用以下代码获取当前登录的用户ID:
$loggedInUserId = \Yii::$app->user->getId();