前提
リアルタイムチャットのようなものをLaravel+Vue.jsで作ろうとしています。
チャットの記録をするテーブル名はrecords、そのモデルはRecordです。
入力されたデータをPusherで受け取るところまではできました。
ブラウザで2つのタブを開き、片方のタブでコメントを送信しました。
そうするともう一つのタブの開発者ツールでNetworkを確認すると
{event: "App\Events\RecordCreated",…} channel: "timeline" data: "{"record":{"id":166,"user_id":"0","body":"test","memo":"memo","date":"11/1","time":"11:11","ip":"ip","created_at":"2020-08-05T03:37:41.000000Z","updated_at":"2020-08-05T03:37:41.000000Z"}}" event: "App\Events\RecordCreated"
このようにしっかり受け取れていることがわかります。
問題
しかしLaravel Echoで下記のように書いてもconsole.logが実行されません。
エラーやlaravel.logも発生しません
Vue
1mounted() { 2 Echo.channel('timeline').listen('.RecordCreated', (e) => { 3 console.log(e); 4 }); 5 }
resourcesJsBootstrapjs
1import Echo from 'laravel-echo'; 2 3window.Pusher = require('pusher-js'); 4 5window.Echo = new Echo({ 6 broadcaster: 'pusher', 7 key: process.env.MIX_PUSHER_APP_KEY, 8 cluster: process.env.MIX_PUSHER_APP_CLUSTER, 9 forceTLS: true 10});
Controller
1$record = Record::create($request->record); 2 event(new RecordCreated($record));
AppEventRecordCreated
1<?php 2 3namespace App\Events; 4 5use App\Record; 6use Illuminate\Broadcasting\Channel; 7use Illuminate\Broadcasting\InteractsWithSockets; 8use Illuminate\Broadcasting\PresenceChannel; 9use Illuminate\Broadcasting\PrivateChannel; 10use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 11use Illuminate\Foundation\Events\Dispatchable; 12use Illuminate\Queue\SerializesModels; 13 14class RecordCreated implements ShouldBroadcast 15{ 16 use Dispatchable, InteractsWithSockets, SerializesModels; 17 18 public $record; 19 20 public function __construct(Record $record) 21 { 22 $this->record = $record; 23 } 24 25 public function broadcastOn() 26 { 27 return new Channel('timeline'); 28 } 29}
バージョン:
Laravel Framework 7.22.4
@vue/cli 4.4.6
あなたの回答
tips
プレビュー