Yii2:创建帖子时添加'user_id'

时间:2016-03-04 21:37:12

标签: yii2 yii2-basic-app

我有一个'post'表,其中包含属性'user_id',以便知道谁发布了该帖子。我遇到一个问题,当创建一个帖子时,'user_id'没有添加到数据库中,这不能为null,所以我不能从那里继续。那么如何自动添加当前登录用户的“user_id”。

我正在使用Yii2基本模板。

由于

3 个答案:

答案 0 :(得分:5)

或者您可以查看Blameable Behavior

  

BlameableBehavior使用当前用户ID自动填充指定的属性。

我在很多项目中使用它(通常与sluggabletimeable结合使用)并且易于使用,只需在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();