如何将 Laravel 事件移动到子目录中并在广播时仍然有效?

How to move Laravel Events into subdirectories and still have them work when broadcasting?

我已将我的 Laravel 事件移动到子目录中,现在我的广播消息收不到了。 Pusher 显示它们正常,如果我将它们移出子目录,它们就会按预期工作,所以我认为这是一个命名空间问题,但我不知道如何让它工作。

我正在关注的事件称为 TeamInvitationEvent,位于 Events->Company->Memberships 目录中。

这是我的听众:

public function getListeners()
{
    $user_id = Auth::id();
    
    return [
        'refresh-navigation-top-menu' => '$refresh',
        "echo-private:user.{$user_id},TeamInvitationEvent" => 'notifyInvitation',
        "echo-private:user.{$user_id},TeamInvitationCancelledEvent" => 'notifyInvitationCancelled',
        "echo-private:user.{$user_id},TeamInvitationAcceptedEvent" => 'notifyInvitationAccepted',
        "echo-private:user.{$user_id},TeamMemberRemovedEvent" => 'notifyMemberRemoved',
    ];
}

这是我的 Pusher 调试控制台的屏幕截图,显示用户订阅了正确的私人频道,并且 API 消息正在该频道上广播:

以下是我尝试针对新命名空间进行更正的不同方法的列表:

Laravel 日志或 Pusher 日志中没有错误,正如我提到的,如果我不将它们移动到子目录中,它会按预期工作。

我在我的应用程序中 运行 以下内容:

这非常明显,但修复它的方法如下:

"echo-private:user.{$user_id},Company\Memberships\TeamInvitationEvent" => 'notifyInvitation'

docs 非常清楚“App\Events”是所有事件的前缀,所以自然地我只需要添加命名空间的其余部分即可使其正常工作。回头一看,其实我之前也试过这个,但一定是忘记清缓存了。在 Livewire Discord 聊天中向@joshhanley 大声喊叫,让我对此进行排序。

旁注:使用 broadcastAs() 使这更干净:

public function broadcastAs()
{
    return 'team.invitation';
}

但不要忘记添加“.”在您的视图中的这个自定义名称之前,像这样:

"echo-private:user.{$user_id},.team.invitation" => 'notifyInvitation'