我对事件和听众之间的差异感到有些困惑。
我了解如何在Events
下创建活动,然后注册并在Handlers\Events
中实施处理程序。所以我在这里有事件和事件的处理。
我在Providers\EventServiceProvider.php
protected $listen = [
UserHasSignedUp::class => [
SendWelcomeEmail::class,
SendAdminEmail::class
]
];
那么什么是听众?
对我来说,他们看起来与事件处理程序完全相同?
答案 0 :(得分:16)
在您的示例中UserHasSignedUp
是Event
。 SendWelcomeEmail
和SendAdminEmail
是两个“等待”事件UserHasSignedUp被触发的侦听器,它们应该以每个handle
方法实现所需的业务逻辑。
超级简单的例子:
UserController中的某个地方
Event::fire(new UserHasSignedUp($user)); //UserHasSignedUp is the event being fired
SendWelcomeEmail类
class SendWelcomeEmail //this is the listener class
{
public function handle(UserHasSignedUp $event) //this is the "handler method"
{
//send an email
}
}
正如您所看到的,每个事件都可以有多个侦听器,但是侦听器无法侦听多个事件。 如果您希望课程听取许多事件,您应该查看Event Subscribers
希望它有所帮助。
答案 1 :(得分:1)
它们之间的唯一区别似乎是,handler:event
来自Laravel 5.0的文件夹结构,make:listener
是 new&当前文件夹结构。 在功能上,它们是相同的! - Upgrade Guide to Laravel 5.1
命令&处理强>
app / Commands目录已重命名为 应用程序/工作。但是,您无需移动所有命令 到新位置,您可以继续使用make:命令和 handler:命令Artisan命令用于生成类。
同样, app / Handlers目录已重命名为app / Listeners 现在只包含事件监听器。但是,您不是必需的 移动或重命名现有的命令和事件处理程序,以及您 可以继续使用handler:event命令来生成事件 处理程序。
为Laravel 5.0文件夹提供向后兼容性 结构,您可以慢慢地将您的应用程序升级到Laravel 5.1 将事件和命令升级到新位置 方便您或您的团队。
这只是Laravel 5.1中提供的向后兼容性。换句话说,早些时候,乔布斯/命令/听众不能自我处理,现在他们。
请注意,handler:event
在Laravel 5.1 之后不可用。
答案 2 :(得分:0)
那里没有太多关于此的信息,所以这可能只是猜测。我看了this video,看到你可以使用带命令的处理程序。我想如果您使用命令,那么将所有处理程序放在一个位置是有意义的。但是,如果您不是,那么拥有App\Handlers\Events\Whatever
可能不如App\Listeners\Whatever
那么理想。
答案 3 :(得分:0)
听众与处理程序:
要触发的特定事件的侦听器listen
。 xxxxCreatedListener只会侦听xxxx
处理程序可以处理要触发的多个事件。例如,假设您使用执行CRUD操作,您的处理程序可以等待xxxxCreatedEvent,xxxxDeletedEvent,xxxxUpdatedEvent。