【问题标题】:Fire an event from Laravel controller and listen on Livewire component从 Laravel 控制器触发事件​​并监听 Livewire 组件
【发布时间】:2021-12-30 23:53:58
【问题描述】:

我想知道是否可以从 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

这应该很简单,但由于某种原因,侦听器没有收到事件。

感谢所有帮助。

【问题讨论】:

  • 不,不可能。相反,请查看一些推送器解决方案以从 laravel 控制器发出事件,从推送器获取它并使用 laravel-echo 在 livewire 中监听它。
  • 为什么不将控制器转换成 Livewire 组件呢?然后你可以从那里发出它,假设两个组件(一个发射和一个监听)加载在该页面上。否则,您需要 Prospero 建议的 websocket 解决方案

标签: laravel laravel-livewire laravel-events


【解决方案1】:

user1 = 订单处理者
user2 = 客户

场景 1:
如果 user2 下了一个新订单,而您正在尝试更新 user1 的界面,则需要查看广播以让您的 livewire 组件为 user1 接收事件。

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

场景 2:
如果 user2 下了一个新订单,而您正在尝试更新 user2 的界面,那么最好将控制器转换为整个 livewire 组件并避免使用控制器。只需存储会话变量并在 livewire 刀片视图中使用 wire:init 检查这些变量即可完成,但从一开始就在 livewire 组件中完成所有操作要容易得多。

【讨论】:

    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 2021-01-14
    • 2021-06-05
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    相关资源
    最近更新 更多