Laravel Echo не признает событие - PullRequest
0 голосов
/ 03 июня 2018

Я успешно настроил Laravel Echo для прослушивания одного события.Однако, когда я попытался добавить дополнительное событие в тот же канал, частью которого был первый, клиентская сторона, похоже, не распознала это новое событие.Однако, глядя на Laravel Horizon, я вижу, что вакансии регистрируются и обрабатываются успешно.Любые идеи о том, почему это может происходить?

Код для нерабочего события:

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class ParticipantCreated implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $data;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($data)
    {
        $this->$data = $data;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('channelReceiveLiveData');
    }
}

Код для рабочего события:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class liveDataTrigger implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $data;

    /**
     * Create a new event instance.
     *
     * @return void
     */

    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('channelReceiveLiveData');
    }
}

Контроллер гдеотправляется событие:

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Participant;
use App\Test;
use App\Events\ParticipantCreated;

class ParticipantController extends Controller
{

    public function create() {
        event(new ParticipantCreated('test'));
    }
}

компонент VueJS, в котором настраивается Echo:

    // This one works
    Echo.channel('channelReceiveLiveData')
    .listen('liveDataTrigger', (e) => {
        console.log('Received Live Event');
    })

    // This one does not work
    .listen('ParticipantCreated', (e) => {
        console.log('Received Participant Created');
    });

Bootstrap.js с инициализацией эхо-сигнала laravel

import Echo from 'laravel-echo'

window.io = require('socket.io-client');


window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001',
});

Я решил попробовать запустить оба события из ParticipantController, и я получил следующий вывод:

Вывод консоли laravel-echo-server:

CHANNEL channelReceiveLiveData
Channel: channelReceiveLiveData
Event: App\Events\liveDataTrigger
CHANNEL channelReceiveLiveData
Channel: channelReceiveLiveData
Event: App\Events\ParticipantCreated

1 Ответ

0 голосов
/ 03 июня 2018

Когда вы слушаете события на частном канале, вы должны указать Echo сделать это, поменяв channel() на private():

Echo.private('channelReceiveLiveData')
    .listen('ParticipantCreated', (e) => {
        console.log('Received Participant Created');
    });

Я полагаю, это потому, что длячастный канал, серверу laravel-echo необходимо выполнить аутентификацию вашего приложения Laravel.Поэтому убедитесь, что вы выполнили все шаги по установке laravel-echo-server, включая настройку конфигурации pusher в config/broadcasting.php.Не забудьте настроить host и port так:

'pusher' => [
    'driver' => 'pusher',
    'key' => env('PUSHER_KEY'),
    'secret' => null,
    'app_id' => env('PUSHER_APP_ID'),
    'options' => [
        'host' => 'localhost',
        'port' => 6001,
    ],
],
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...