Laravel 5 - 事件处理程序和监听器之间的混淆
Laravel 5 - Confusion between Event Handlers and Listeners
我对 Events 和 Listeners 之间的区别有点困惑。
我了解如何在 Events
下创建事件然后注册它们并在 Handlers\Events
中实施处理程序。所以这里我有事件和事件的处理。
我在 Providers\EventServiceProvider.php
中定义它们后它们就起作用了
protected $listen = [
UserHasSignedUp::class => [
SendWelcomeEmail::class,
SendAdminEmail::class
]
];
那么 Listeners 是什么?
对我来说,它们似乎与 事件处理程序?
完全一样
在你的例子中 UserHasSignedUp
是一个 Event
。 SendWelcomeEmail
和 SendAdminEmail
是要触发事件 UserHasSignedUp 的两个侦听器 "waiting",它们应该在每个侦听器的 handle
方法中实现所需的业务逻辑。
超级简单的例子:
UserController 中的某处
Event::fire(new UserHasSignedUp($user)); //UserHasSignedUp is the event being fired
发送欢迎邮件class
class SendWelcomeEmail //this is the listener class
{
public function handle(UserHasSignedUp $event) //this is the "handler method"
{
//send an email
}
}
如您所见,每个事件可以有多个侦听器,但一个侦听器只能侦听一个事件。
如果你想要 class 监听很多事件,你应该看看 Event Subscribers
希望对您有所帮助。
关于这方面的信息不多,所以这可能只是猜测。我看了一下 this video,发现您可以将处理程序与命令一起使用。我认为如果您使用的是命令,那么将所有处理程序放在一个位置是有意义的。但是,如果您不是,那么拥有 App\Handlers\Events\Whatever
可能不如 App\Listeners\Whatever
令人满意。
听众与处理者:
要触发的特定事件的侦听器 listen
。 xxxxCreatedListener 只会监听 xxxx
一个处理程序可以处理多个要触发的事件。例如,假设您使用执行 CRUD 操作,您的处理程序可以等待 xxxxCreatedEvent、xxxxDeletedEvent、xxxxUpdatedEvent。
它们之间的唯一区别似乎是,handler:event
来自 Laravel 5.0 的文件夹结构,而 make:listener
是 new & current 文件夹结构。 在功能上,它们是相同的! - Upgrade Guide to Laravel 5.1
Commands & Handlers
The app/Commands directory has been renamed to
app/Jobs. However, you are not required to move all of your commands
to the new location, and you may continue using the make:command and
handler:command Artisan commands to generate your classes.
Likewise, the app/Handlers directory has been renamed to app/Listeners
and now only contains event listeners. However, you are not required
to move or rename your existing command and event handlers, and you
may continue to use the handler:event command to generate event
handlers.
By providing backwards compatibility for the Laravel 5.0 folder
structure, you may upgrade your applications to Laravel 5.1 and slowly
upgrade your events and commands to their new locations when it is
convenient for you or your team.
这只是Laravel 5.1中提供的向后兼容性。也就是说,之前Jobs/Commands/Listeners是不自处理,现在是。
请注意,handler:event
在Laravel 5.1之后不可用。
我对 Events 和 Listeners 之间的区别有点困惑。
我了解如何在 Events
下创建事件然后注册它们并在 Handlers\Events
中实施处理程序。所以这里我有事件和事件的处理。
我在 Providers\EventServiceProvider.php
protected $listen = [
UserHasSignedUp::class => [
SendWelcomeEmail::class,
SendAdminEmail::class
]
];
那么 Listeners 是什么?
对我来说,它们似乎与 事件处理程序?
完全一样在你的例子中 UserHasSignedUp
是一个 Event
。 SendWelcomeEmail
和 SendAdminEmail
是要触发事件 UserHasSignedUp 的两个侦听器 "waiting",它们应该在每个侦听器的 handle
方法中实现所需的业务逻辑。
超级简单的例子:
UserController 中的某处
Event::fire(new UserHasSignedUp($user)); //UserHasSignedUp is the event being fired
发送欢迎邮件class
class SendWelcomeEmail //this is the listener class
{
public function handle(UserHasSignedUp $event) //this is the "handler method"
{
//send an email
}
}
如您所见,每个事件可以有多个侦听器,但一个侦听器只能侦听一个事件。 如果你想要 class 监听很多事件,你应该看看 Event Subscribers
希望对您有所帮助。
关于这方面的信息不多,所以这可能只是猜测。我看了一下 this video,发现您可以将处理程序与命令一起使用。我认为如果您使用的是命令,那么将所有处理程序放在一个位置是有意义的。但是,如果您不是,那么拥有 App\Handlers\Events\Whatever
可能不如 App\Listeners\Whatever
令人满意。
听众与处理者:
要触发的特定事件的侦听器 listen
。 xxxxCreatedListener 只会监听 xxxx
一个处理程序可以处理多个要触发的事件。例如,假设您使用执行 CRUD 操作,您的处理程序可以等待 xxxxCreatedEvent、xxxxDeletedEvent、xxxxUpdatedEvent。
它们之间的唯一区别似乎是,handler:event
来自 Laravel 5.0 的文件夹结构,而 make:listener
是 new & current 文件夹结构。 在功能上,它们是相同的! - Upgrade Guide to Laravel 5.1
Commands & Handlers
The app/Commands directory has been renamed to app/Jobs. However, you are not required to move all of your commands to the new location, and you may continue using the make:command and handler:command Artisan commands to generate your classes.
Likewise, the app/Handlers directory has been renamed to app/Listeners and now only contains event listeners. However, you are not required to move or rename your existing command and event handlers, and you may continue to use the handler:event command to generate event handlers.
By providing backwards compatibility for the Laravel 5.0 folder structure, you may upgrade your applications to Laravel 5.1 and slowly upgrade your events and commands to their new locations when it is convenient for you or your team.
这只是Laravel 5.1中提供的向后兼容性。也就是说,之前Jobs/Commands/Listeners是不自处理,现在是。
请注意,handler:event
在Laravel 5.1之后不可用。