从Laravel控制器启动一个事件并监听Livewire组件



我试图弄清楚是否可以从Laravel常规控制器发出事件,并在Livewire组件上定义一个监听器。这是我迄今为止的旅程:

我已经生成了事件:

php artisan make:event NewOrder

然后,在控制器方法placeNewOrder上,我触发这样的事件:

event(new NewOrder())

在Livewire组件上,我定义了一个可变的$showNewOrderNotification和侦听器:

public $showNewOrderNotification = false
protected $listeners = ['NewOrder' => 'notifyNewOrder'];

并设置方法notifyNewOrder

public function notifyNewOrder()
{
$this->showNewOrderNotification = true;
}

livewire视图仅在$showNewOrderNotification变量为true时显示警报:

@if($showNewOrderNotification)
<div class="alert alert-danger text-uppercase">
New Orders !!!
</div>
@endif

这应该是非常直接的,但由于某种原因,听众没有得到事件。

我感谢所有的帮助。

user1=订单处理者
user2=customer

场景1:
如果用户2下了新订单,而您正试图更新用户1的界面,则需要查看广播,以便让您的livewire组件为用户1接收事件。

https://laravel.com/docs/8.x/broadcasting
https://laravel-livewire.com/docs/2.x/laravel-echo

场景2:
如果用户2下了新订单,而您正试图更新用户2的界面,那么最好将控制器转换为整个火线组件,并避免将控制器全部放在一起。只需存储会话变量并在livewire blade视图中使用wire:init检查这些变量就可以完成,但从一开始,只需在一个livewire组件中完成这一切要容易得多。

最新更新