首页 文章

Laravel nova资源扩展/覆盖create方法

提问于
浏览
0

我正在使用Laravel Nova开发一个Web管理面板 .

我有一个问题,因为Nova是一项非常新的技术 .

我现在想做的是我想添加一个隐藏字段或扩展或覆盖create方法 .

这是我的情景 . 让我们保存我有一个带有以下字段的 vacancy nova资源 .

public function fields(Request $request)
{
    return [
        ID::make()->sortable(),
        Text::make('Title')->sortable(),
        Text::make('Salary')->sortable()
        // I will have another field, called created_by
    ];
}

非常简单 . 我喜欢做的是我想在数据库中添加一个名为 created_by 的新字段 . 然后该字段将自动填充当前登录的用户 id$request->user()->id ) .

如何覆盖或扩展Nova的创建功能?我怎样才能实现它?

我可以使用资源事件,但如何在事件中检索登录用户?

1 回答

  • 1

    你要找的是Resource Events .

    来自文档:

    所有Nova操作都使用典型的save,delete,forceDelete,恢复您熟悉的Eloquent方法 . 因此,很容易听到Nova触发的模型事件并对它们做出反应 . 最简单的方法是简单地将模型观察者附加到模型:

    如果你不想创建一个新的observable,你也可以在你的雄辩模型中创建一个 boot 方法,如下所示:

    public static function boot()
    {
        parent::boot();
    
        static::creating(function ($vacancy) {
            $vacancy->created_by = auth()->user()->id;
        });
    }
    

    但是请注意,这些比观察者更难跟踪,而你或未来的下一个开发人员可能会摸不着头脑,想知道“created_at”属性集是如何设置的 .

相关问题