首页 > 解决方案 > 使用 Livewire 时 Laravel 审计不起作用

问题描述

一个
框架 拉拉维尔
框架版本 8.0
包版本 10.0
PHP版本 7.4
实际行为

使用 Livewire 时,通过它触发的任何事件,例如创建。审计未注册该事件。

预期行为

创建一个新条目,例如通过 Livewire 的潜在客户,它应该被审计捕获并相应地添加。

重现步骤

填写表格以创建潜在客户后,将调用此代码:

        $validated = $this->validate();

        //Manually set defaults
        $validated['lead_type'] = 'Manual';
        $validated['is_approved'] = 1;
        $validated['rating'] = $this->rating;

        if ($validated['lead_temp'] == 'Temp') {
            $validated['lead_temp'] = 'Default';
        }

        if ($validated['lead_status_id'] == 0) {
            $validated['lead_status_id'] = '1'; //default set to unassigned
        }

        //Manually set IDs
        $validated['company_id'] = auth()->user()->company_id;
        $validated['flag_alert_id'] = 1;
        $validated['campaign_id'] = 1;
        $validated['quote_id'] = 1;
        $validated['quote_data_id'] = 1;
        $validated['form_id'] = 1;
        $validated['form_data_id'] = 1;
        $validated['number_id'] = 1;
        $validated['email_id'] = 1;

        if(!empty($validated['user_id']) || $validated['user_id'] == 0) {
            $validated['user_id'] = auth()->user()->id;
        }
        else {
            $validated['user_id'] = $this->user_id;
        }

        $leadID = Lead::create($validated)->id;

        if(!empty($this->products)){
            $this->linkProductsToLeads($leadID);
        }

        if(!empty($this->files)){
            $this->uploadFiles($leadID);
        }

        $this->resetForm();

        session()->flash('snack-success', 'Lead successfully created!');
        $this->dispatchBrowserEvent('success-shown');
    }

其中“$leadID = Lead::create($validated)->id”不会出现在数据库中。

可能的解决方案

我不知道如何解决这个问题,在这种情况下通过控制器使用基于 Laravel 的正常创建 LeadsController 时,潜在客户将显示在审计表中。通过 JS Ajax 并命中端点的系统的其他部分工作得非常好,似乎是 Livewire 特定的问题。

标签: laravellaravel-livewirelaravel-auditing

解决方案


推荐阅读