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

Sta*_*ite 0 yii2 yii2-basic-app

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

我正在使用Yii2基本模板.

谢谢

Jør*_*gen 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
            ]
        ],
    ];
}
Run Code Online (Sandbox Code Playgroud)

引用验证行为的行为验证.

如果你想像其他答案建议那样手动完成,你需要改变

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    }
Run Code Online (Sandbox Code Playgroud)

    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]);
    }
Run Code Online (Sandbox Code Playgroud)

请记住:在输入用户ID之前验证时,模型规则中不需要user_id!