我试图弄清楚是否可以从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组件中完成这一切要容易得多。