私は、これは、コンソール上のエラーをJS取得しています:プライベートチャンネル
app.js:167キャッチされないにReferenceError:receiverIdは
ここに私の完全なコードがある
に定義されていません。PrivateChatController:
event(new PrivateMessageEvent($chat, $receiverId));
PrivateMessageEvent:
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;
use App\User;
use App\PrivateChat;
class PrivateMessageEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $privateChat, $receiverId;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(PrivateChat $privateChat, $receiverId)
{
$this->privateChat = $privateChat;
$this->receiverId = $receiverId;
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('private-chat.' . $this->receiverId);
}
}
Bootstrap.js
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
});
window.Echo.private(`private-chat.${receiverId}`)
.listen('PrivateMessageEvent', (e) => {
console.log(e);
});
channels.php
Broadcast::channel('private-chat.{receiverId}', function ($user, $receiverId) {
return true; // this is just for debugging to allow anyone to listen on this channel
//return $user->id === $receiverId;
});
laravel-エコーserver.json
背景 キューに{
"authHost": "http://localhost",
"authEndpoint": "/broadcasting/auth",
"clients": [],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": null,
"port": "6001",
"protocol": "http",
"socketio": {},
"sslCertPath": "",
"sslKeyPath": ""
}
:仕事とlaravelエコーサーバがすでにそのイベントを発射する際
を実行している、私はlaravel-エコーサーバコンソールに、このメッセージが出ています:
Channel: private-private-chat.
Event: App\Events\PrivateMessageEvent
CHANNEL private-private-chat.
注:
パブリックチャンネルを聞くことに成功しました。プライベートチャンネルの唯一の問題です。
私もgithubの上の問題を提起している:私は公式ドキュメントごとなど、すべての事を行っている最新Laravelのバージョンすなわち5.4
を使用して
レポ:
https://github.com/tlaverdure/laravel-echo-server/issues/158
私は10時間以上を過ごし、私ができるすべてのものが、運を試してみました。この行に
$this->$receiverId = $receiverId;
:
おかげ
イベントを発生させる前に、 'dd($ receiverId);'を実行してください。 '$ receiverId'がヌルだと言いますか? – Jono20201
@ jono20201、私はすでに変数をチェックしています。それは正しい値を持っています - ヌルではありません。 –