Bonjour l’équipe j’ai un problème avec laravel… je n’arrive pas à diffuser mon évènement sur un channel privé.. je suivais un tuto mais ça marche chez lui mais j'ai tout fait regarder la doc et tout mais rien ne marche du moins je n'arrive pas a avoir le message instantané j’utilise laravel-webSockets...
ici le code de mon event MessageAddedEvent
<?phpclass MessageAddedEvent implements ShouldBroadcast{ use Dispatchable, InteractsWithSockets, SerializesModels; public $message; /** * Create a new event instance. * * @return void */ public function __construct(Message $message) { $this->message = $message; } public function broadcastWith() { return [ 'message' => [ 'id' => $this->message->id ] ]; } /** * Get the channels the event should broadcast on. * * @return \Illuminate\Broadcasting\Channel|array */ public function broadcastOn() { return new PrivateChannel('discussion.' . $this->message->conversation->id); }
dans un de mes qui composant livewire je diffuse l'evenement
<?php namespace App\Http\Livewire\Conversations; use App\Events\Conversations\MessageAddedEvent;use App\Events\conversations\MessageAjouter;use App\Http\Requests\MessageRequest;use App\Models\Conversation;use Illuminate\Support\Facades\Broadcast;use Livewire\Component; class ConversationReply extends Component{ public $body; public $conversation; public function mount(Conversation $conversation) { $this->conversation = $conversation; } public function reply() { $this->validate([ 'body' => 'required' ]); //on met a jour la date du dernier message $this->conversation->update([ 'last_message_at' => now() ]); $message = $this->conversation->messages()->create([ 'user_id' => auth()->id(), 'body' => $this->body, ]); foreach ($this->conversation->others as $user) { $user->conversations()->updateExistingPivot($this->conversation, [ 'read_at' => null ]); } broadcast(new MessageAddedEvent($message))->toOthers(); //ensuite on emet un evenement $this->emit('message.created', $message->id); $this->body = ''; }
et ensuite les channels
Broadcast::channel('discussion.{id}', function ($user, $id) { dd('toto'); return true; // return $user->inConversation($id);});
je n'arrive pas non plus a executer mon dd('toto')
donc je n'ai meme pas accès a cette route de channel
mon problème ici est que je n'arrive pas à recevoir les messages en temps réel je suis obligé de recharger la page et pourtant j'ai suivi toutes les étapes pour le faire
ensuite mon composant ConversationMessages
ou je crée des listeners pour écouter les différents events.
mais sur la liigne "echo-private:discussion.{$this->conversationId},Conversations\\MessageAddedEvent" => "prependMessageFromBroadcast"
je fais appel a la méthode prependMessageFromBroadcast
mais je n'arrive pas acceder a celle ci.
<?php class ConversationMessages extends Component{ public $conversationId; public $messages; public function mount(Conversation $conversation, Collection $messages) { $this->conversationId = $conversation->id; $this->messages = $messages; } public function getListeners() { return [ 'message.created' => 'prepend_message', "echo-private:discussion.{$this->conversationId},Conversations\\MessageAddedEvent" => "prependMessageFromBroadcast", ]; } //push methode ajoute un element en fin de collection public function prepend_message(int $message_id) { $this->messages->push(Message::find($message_id)); } public function prependMessageFromBroadcast($payload) { $this->prepend_message($payload['message']['id']); }
voila si quelqu'un voit d'où vient mon problème je serais ravis merci
As tu bien ajoute cette recommandation dans le fichier config/app.php .? https://laravel.com/docs/9.x/broadcasting#broadcast-service-pr...
oui j'ai bien décommenté la ligne App\Providers\BroadcastServiceProvider::class,
Tu peux fournir le repo github.?
ah mince c'est sur gitlab je le mets sur github et je l'envoie
j'arrive desormais à voir dans les log de serve websockets quand j'envoie un message mais il n'arrive toujours pas de façon instantané a celui qui reçoit le message
Connection id 541484910.242224924 sending message {"event":"log-message","channel":"private-websockets-dashboard-api-message","data":{"type":"api-message","time":"17:07:36","details":"Channel: private-conversations.6, Event: App\\Events\\Conversations\\MessageAddedEvent","data":"{\"message\":{\"id\":144}}"}}
Veuillez vous connecter ou créer un compte pour participer à cette conversation.