Laravel - возможно ли передать параметр object | array для аутентификации трансляций в privatechannel? - PullRequest
0 голосов
/ 18 декабря 2018

UserController.php

event(new MyEvent($MyObject));

MyEvent.php

public function broadcastOn()
{
    return new PrivateChannel('check-validity.'.$this->MyObject);
}

channel.php

Broadcast::channel('check-validity.{MyObject}', function ($user, $MyObject) {
    $sameMyObject = MyModel::where('some_id', $MyObject->some_id)
        ->where('state', 1000)
        ->where('user_id', $user->id)
        ->where('some_other_id', $MyObject->some_other_id)
        ->first();

    if($sameMyObject)
    {
        return true;
    }
});

У меня есть таблица с именем MyTable в качестве примеракоторый имеет несколько столбцов.Наиболее важные из них: some_id, user_id, some_other_id.Когда пользователь запускает event(new MyEvent($MyObject)), содержимое $MyObject является объектом его самого, НО я хочу проверить здесь в Broadcast::channel('check-validity..., есть ли у другого пользователя такая же строка в MyTable с некоторыми отличиями, которые могут быть ->where('state', 1000) или нет.Если так было, то отправлять только этому пользователю (концепция аутентификации для этого пользователя).

Теперь мой вопрос: можно ли передать объект | массив в Broadcast::channel?если да, как я могу передать данные другого пользователя об этом $MyObject в Echo?Я спрашиваю об этом, потому что до этого я мог передавать другие пользовательские данные, которые были ТОЛЬКО ТОЛЬКО user_id, что я сделал html-тег и получил значение для его передачи через канал: window.Echo.private('valid-user.' + user_id), но теперь вместо этого user_id Iне знаю, как я могу передать MyObject контент для аутентификации из-за этих sql несколько условий должны быть установлены.

Спасибо:)

1 Ответ

0 голосов
/ 25 июля 2019

Почему бы вам не попробовать сериализовать ваш массив следующим образом

$a= array("john" => 120,"dave" => 342,"joe" => 553);
print_r($a);
echo "<br/>";
$b=serialize($a);
echo $b."<br/>";
$c=unserialize($b);
print_r($c);

Но для отправки model сделайте это

use App\Order;

Broadcast::channel('order.{order}', function ($user, Order $order) {
    return $user->id === $order->user_id;
});

https://laravel.com/docs/5.8/broadcasting#defining-authorization-callbacks

...