Laravel 5 - 事件处理程序和监听器之间的混淆

时间:2015-05-19 21:16:57

标签: laravel event-handling laravel-5 event-listener

我对事件听众之间的差异感到有些困惑。

我了解如何在Events下创建活动,然后注册并在Handlers\Events中实施处理程序。所以我在这里有事件和事件的处理。

我在Providers\EventServiceProvider.php

中定义它们后,它们正常工作
protected $listen = [
    UserHasSignedUp::class => [
        SendWelcomeEmail::class,
        SendAdminEmail::class
    ]
];

那么什么是听众

对我来说,他们看起来与事件处理程序完全相同?

4 个答案:

答案 0 :(得分:16)

在您的示例中UserHasSignedUpEventSendWelcomeEmailSendAdminEmail是两个“等待”事件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。