如何在Laravel中将数据传递给broadcastAs事件方法?

时间:2019-03-27 01:49:02

标签: php laravel

我正在尝试将数据传递给方法broadcastAs,但是我一直收到错误Too few arguments to function App\Events\NotifyUser::broadcastAs()。下面是我尝试过的。

我通过以下方式在控制器上调用事件:

event(new NotifyUser('8', 'banned'));

我正在尝试通过以下方式访问事件中的数据:

public $user;

public $msg;

public function __construct($user, $msg)
{
    $this->user = $user; //8
    $this->msg = $msg; //banned
}

public function broadcastAs($user)
{
    return "user-logged-$user";
}

broadcastAs 中没有 $ user 变量的情况下,它可以正常工作。

1 个答案:

答案 0 :(得分:1)

您应该将其与set属性($this->user)一起使用,而不要使用参数。

public $user;

public $msg;

public function __construct($user, $msg)
{
    $this->user = $user;
    $this->msg = $msg;
}

public function broadcastAs()
{
    return "user-logged-" . $this->user->id;
}

但是,您确定要在此使用它吗?

 window.Echo.private('channel-name.' + user_id)
        .listen('BroadcastClassName', (e) => { }  
        // you'll edit listen() with broadcastAs

public function broadcastOn()
{
    return new PrivateChannel('user.'.$this->user->id);
}

// broadcastAs() is optional
public function broadcastAs() {
    return 'customEventName';
}

broadcastAs()对于覆盖事件名称是可选的,因为默认名称是类名称本身。

最后一块,这就是你要得到的。

 window.Echo.private('user.' + user_id)
        .listen('customEventName', (e) => { }  

如果您根本没有broadcastAs(),那么在您的情况下,您的活动名称将为"NotifyUser",对我来说似乎是正确的。

    window.Echo.private('user.' + user_id)
        .listen('NotifyUser', (e) => { }