首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel livewire不处理来自广播的监听程序

Laravel livewire不处理来自广播的监听程序
EN

Stack Overflow用户
提问于 2021-09-14 18:51:33
回答 2查看 431关注 0票数 0

我试着在laravel中收听从广播中发出的事件,但是什么也没有发生;

在我的bootstrap.js上我有:

代码语言:javascript
复制
import Echo from 'laravel-echo';

window.Pusher = require('pusher-js');

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'myKey',
    wsHost: window.location.hostname,
    wsPort: 6001,
    disableStat: true,
    forceTLS: false,
});

我的活动拉瓦尔

代码语言:javascript
复制
class TaskFinished implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function __construct()
    {
        //
    }

    public function broadcastAs(){
        return 'task-finish';
    }

    public function broadcastOn()
    {
        return new Channel('TaskTricolor');
    }
}

我的听众

代码语言:javascript
复制
class SendTaskNotif
{
    /**
     * Create the event listener.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Handle the event.
     *
     * @param  TaskFinished  $event
     * @return void
     */
    public function handle(TaskFinished $event)
    {
    }
}

和我的livewire组件

代码语言:javascript
复制
protected $listeners = ['echo:TaskTricolor,TaskFinished' => 'eventlisten'];

    // public function getListeners(){
    //     return [
    //         'echo:TaskTricolor,TaskFinished' => 'eventlisten'
    //     ];
    // }

    public function start(){
        $this->start = true;
        $tricolors = new TricolorController();
        $this->tricolor = $tricolors->start();
    }

    public function stop(){
        $this->start = false;
        $tricolors = new TricolorController();
        $this->tricolor = $tricolors->stop();
    }
    

    public function emet(){
        event(new TaskFinished());
    }

    public function eventlisten(){
        $vars = "test";
        dd($vars);
    }

在我的监听程序中,我设置了dd('test'),当调用emet函数时,将显示dd值;

因此,当我使用livewire侦听器处理程序进行测试时,什么都没有发生,我的dd没有出现,也没有错误;

我尝试从刀片服务器控制台记录Echo,以测试我是否可以处理侦听器,但它显示Echo未定义,但当我console.log窗口时,我看到Echo内部

在我的websocket仪表板上,我有:

我不知道它是否能帮助解决问题,我使用beyondcode/laravel-websockets包作为驱动程序

EN

回答 2

Stack Overflow用户

发布于 2021-09-15 02:17:28

当我第一次开始使用Livewire (1.0版)时,我们使用vanilla javascript收听消息,然后称为Livewire。

代码语言:javascript
复制
document.addEventListener("DOMContentLoaded", function () {
    window.Echo.private('TaskTricolor')
        .listen('.task-finish', (response) => { 
            window.Livewire.emit('task-finish', response));
        }
    });

你可以试试这个。它不像你的方法那样是一个干净的解决方案,但我认为更容易调试。

票数 0
EN

Stack Overflow用户

发布于 2021-09-15 17:31:58

我发现了这个问题;在我的event类中,我应该使用ShouldBroadCastNow而不是ShouldBroadCast

代码语言:javascript
复制
class TaskFinished implements ShouldBroadcastNow
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function __construct()
    {
        //
    }

    public function broadcastAs(){
        return 'task-finish';
    }

    public function broadcastOn()
    {
        return new Channel('TaskTricolor');
    }
}

ShouldBroadCast将事件放入队列中,所以它不会在调用事件时激活,但ShouldBroadCastNow会立即监听事件,here链接我找到了解释

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69183168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档