Broadcast:: функция обратного вызова канала не вызывается
У меня есть проблема, когда событие правильно запускается,но данные не возвращаются из функции обратного вызова авторизации внутри Broadcast::channel
.
Событие выглядит так:
public function __construct($userId, $message, $username, $profileImg, $fixtureId)
{
$this->message = $message;
$this->username = $username;
$this->profileImg = $profileImg;
$this->userId = $userId;
$this->fixtureId = $fixtureId;
}
Канал (присутствие) создается и транслируется следующим образом:
public function broadcastOn()
{
return new PresenceChannel('fixture-channel.' . $this->fixtureId);
}
Затем в BroadcastServiceProvider
public function boot()
{
Broadcast::routes(['middleware' => ['auth']]);
require base_path('routes/channels.php');
}
-файл, в котором находится проблемная функция, выглядит так:
channels.php
Как вы видите, я пытаюсь вставить некоторые данные в функцию обратного вызова, но этого никогда не происходит. Вне функции callaback данные успешно вставляются. Я также попытался с функцией обратного вызова, где определены только Broadcast::channel('fixture-channel.{fixtureId}', function ($user, $fixtureId, $message, $username, $profileImg, $userId) {
DB::table('test')->insert(array('id' => '4'));
return [
'message' => $message,
'username' => $username,
'profileImg' => $profileImg,
'userId' => $userId,
'fixtureId' => $fixtureId
];
});
и user
-без успеха.
Заранее спасибо.
Ответы - Broadcast:: функция обратного вызова канала не вызывается / Broadcast::channel callback function is not called

15.12.2019 11:24:45
Насколько я знаю, channel.php
- это логика авторизации.
Если вы возвращаете данные broadcastWith()
- или если у вас нет broadcastWith()
, будут переданы общедоступные свойства.
Это должно быть что-то вроде
Broadcast::channel('fixture-channel.{fixtureId}', function ($user, $fixtureId) {
return $user->canAccess($fixtureId)
});
Остальное прекрасно можно сделать в конструкте. Независимо от того, какие из ваших свойств определены как общедоступные, они будут вытеснены.
public $message;
public $username;
// etc..
public function __construct($userId, $message, $username, $profileImg, $fixtureId)
{
$this->message = $message;
$this->username = $username;
$this->profileImg = $profileImg;
$this->userId = $userId;
$this->fixtureId = $fixtureId;
}
Дополнительно, допустим, вы хотите нажать только message
и username
пользователя, а затем использовать broadcastWith()
.
public function broadcastWith() {
return [
'message' => $this->message,
'username' => $this->username
]
}
Если целью является запись в базу данных, когда сообщение транслируется, вы можете просто поместить его в
public function broadcastOn()
{
\DB::table('test')->insert(array('id' => '4'));
return new PresenceChannel('fixture-channel.' . $this->fixtureId);
}
