Я успешно настроил 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