如何将 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 消息正在该频道上广播:
以下是我尝试针对新命名空间进行更正的不同方法的列表:
- App.Events.Company.Memberships.TeamInvitationEvent
- App\Events\Company\Memberships\TeamInvitationEvent
- /App/Events/Company/Memberships/TeamInvitationEvent
- .TeamInvitationEvent
Laravel 日志或 Pusher 日志中没有错误,正如我提到的,如果我不将它们移动到子目录中,它会按预期工作。
我在我的应用程序中 运行 以下内容:
- Laravelv8
- Livewire v2
- Laravel回声 v1
- 推动者
这非常明显,但修复它的方法如下:
"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'
我已将我的 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 消息正在该频道上广播:
以下是我尝试针对新命名空间进行更正的不同方法的列表:
- App.Events.Company.Memberships.TeamInvitationEvent
- App\Events\Company\Memberships\TeamInvitationEvent
- /App/Events/Company/Memberships/TeamInvitationEvent
- .TeamInvitationEvent
Laravel 日志或 Pusher 日志中没有错误,正如我提到的,如果我不将它们移动到子目录中,它会按预期工作。
我在我的应用程序中 运行 以下内容:
- Laravelv8
- Livewire v2
- Laravel回声 v1
- 推动者
这非常明显,但修复它的方法如下:
"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'