アプリのチャット/メッセージ機能に取り組んでいます。ユーザーがメッセージを送信すると、特定のイベントがトリガーされてブロードキャストされるようにします。pusher
次に、ドライバーを使用して、Laravel Echo がイベントのブロードキャスト チャンネルで Laravel Echo を介してイベントをリッスンするようにします。
Laravel Echo の実装を Vue コンポーネントに入れ、イベントを介してブロードキャストされたデータを取得したいと考えています。現在、イベントをプライベート チャネルまたはチャネルのみにブロードキャストすることはできません。
これが私がやったことです:
1) に構成を追加しました.env
。
2) に設定を追加bootstrap.js
:
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'mykey',
encypted: false
});
3)認証チェックインを追加しましたApp\Providers\BroadcastServiceProvider
(ユーザーが今のところサインインしている場合はtrueを返すだけです):
Broadcast::channel('chat', function ($user) {
// verify that user is recipient of message
return \Auth::check();
});
App\Providers\BroadcastServiceProvider::class,
4)に追加App/config/app.php
。
5)名前付きApp\Events\UserSentMessage
でブロードキャストする Event を作成しました。また、にブロードキャストしようとしました。確認したところ、コントローラーのヘルパーへの呼び出しからイベントが発生していますが、ブロードキャストされていないようです。上記のコントローラーでメソッドを使用してみました。PrivateChannel
chat
Channel
event()
broadcast
6) 有効な Vue コンポーネントの Vue ライフサイクル フック内に以下を追加しましたmounted
(コンポーネントは期待どおりにデータなどをレンダリングしていますが、Laravel Echo atm では機能しません)。
Echo.private('chat').listen('UserSentMessage', (data) => {
console.log(data);
}, (e) => {
console.log(e);
});
また試してみました:
Echo.channel('chat').listen('UserSentMessage', (data) => {
console.log(data);
}, (e) => {
console.log(e);
});
Vue コンポーネントは、指定されたチャネルに正常にサブスクライブしています。プッシャー デバッグ コンソールは、サブスクライブされていることを認識しましたが、トリガーされたイベントはブロードキャストされません。
イベントの放送に問題があるようです。broadcast()
ヘルパーではなく、ヘルパーを使用してみましたevent()
。
また、 経由で Laravel Echo でイベントにサブスクライブする場合Echo.private()
。チャンネル名の前に が付いているように見えるprivate
ので、(イベントで) という名前のチャンネルにもブロードキャストしようとしましたprivate-chat
。