Привет, я использую службы толкания и эхо-сообщений Laravel в своем проекте, когда я отправляю сообщение, сообщение транслируется и отображается в puhser в консоли, но не отображается на другом экране входа в режиме реального времени, не работает. Это мой класс сообщений
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Events\NewMessage;
class Message extends Model
{
protected $dispatchesEvents = [
'created' => NewMessage::class
];
protected $fillable = [
'from', 'to', 'text'
];
}
Это мой канал
Broadcast::channel('messages.{id}', function ($user, $id) {
return $user->id === (int) $id;
});
Это мой контроллер
public function sendmessage(Request $request)
{
$message=Message::create([
'from'=>Auth::user()->id,
'to'=>$request->contact_id,
'text'=>$request->text,
]);
return response()->json($message);
}
Это мое событие
<?php
namespace App\Events;
use App\Message;
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 NewMessage implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Message $message)
{
$this->message=$message;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
// dd($this->message->to);
return new PrivateChannel('messages.'.$this->message->to);
}
public function broadcastWith()
{
return ["message" => $this->message];
}
}
это мой компонент
mounted() {
Echo.private(`messages.${this.user.id}`)
.listen('NewMessage', (e) => {
console.log(e);
this.hanleIncoming(e.message);
});
console.log('Component mounted.')
axios.get('/getContacts').then((response)=>{
this.contacts=response.data;
console.log(this.contacts);
});
},