Sta*_*ite 0 yii2 yii2-basic-app
我有一个"post"表,其中包含属性"user_id",以便知道谁发布了该帖子.我遇到了一个问题,当创建一个帖子时,'user_id'没有添加到数据库中,这不能为null,所以我不能从那里继续.那么如何自动添加当前登录用户的"user_id".
我正在使用Yii2基本模板.
谢谢
或者你可以看一下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!
| 归档时间: |
|
| 查看次数: |
1049 次 |
| 最近记录: |