Laravel Backpack中如何为Post自动关联当前登录用户
解决Laravel Backpack自动关联当前用户到Post的问题
你之前的尝试无效是因为$this->crud->model指向的是模型类,而非要创建的Post实例,所以associate操作不会作用到新创建的条目上。这里有两种更简洁的实现方式:
方法一:利用模型creating回调
在PostCrudController的setupCreateOperation方法中添加以下代码:
// 先隐藏user_id字段(如果不需要手动选择用户) $this->crud->addField([ 'name' => 'user_id', 'type' => 'hidden', ]); // 创建前自动绑定当前用户 $this->crud->model::creating(function ($post) { $post->user_id = backpack_user()->id; });
方法二:使用Backpack的beforeSave钩子
同样在setupCreateOperation方法中,借助Backpack内置的保存前钩子来处理关联:
$this->crud->addField([ 'name' => 'user_id', 'type' => 'hidden', ]); $this->crud->setOperationSetting('saveOptions', [ 'beforeSave' => function ($entry) { $entry->user()->associate(backpack_user()); return $entry; }, ]);
两种方法都能自动将当前登录的Backpack用户关联到新创建的Post上,无需全局模型事件,逻辑集中在CrudController内更易维护。
内容的提问来源于stack exchange,提问作者Kaspar Martin Suursalu
相关产品推荐
相关产品推荐

