事件机制
事件
Masonite 附带「发布和订阅」样式的事件功能,允许你订阅各种事件并在发出这些事件时运行监听器或其他逻辑。
创建事件
事件的第一步是创建一个要监听的事件。
事件是简单的类,你可以在任何你喜欢的地方创建:
$ python craft event UserAdded
这将创建一个我们稍后可以发出的简单类。
你也可以在没有 Event 类的情况下触发事件。该事件将只是你可以收听的特定键。
创建一个监听器
事件发出时,监听器将运行逻辑。你可以根据需要创建任意数量的监听器,并根据需要为事件注册任意数量的监听器。
要创建监听器,只需运行以下命令:
$ python craft listener WelcomeEmail
这将创建一个像这样的类:
class WelcomeEmail:
def handle(self, event):
pass
处理方法
handle 方法将在监听器运行时运行。它将事件作为第一个参数传递,并且从事件发出的任何附加参数作为附加参数传递。
注册事件和监听器
创建事件和监听器后,你需要将它们注册到事件类。
你可以通过 AppProvider
或你自己创建的 Service Provider 来执行此操作:
class EventsProvider(Provider):
def register(self):
self.application.make('event').listen(UserAddedEvent, [WelcomeListener])
你也可以在没有 Event 类的情况下监听事件:
class EventsProvider(Provider):
def register(self):
self.application.make('event').listen("users.added", [WelcomeListener])
使用事件字符串允许使用通配符事件监听。例如,如果应用程序发出多个与用户相关的事件,例如 users.added
、users.updated
和 users.deleted
,你可以一次监听所有这些事件:
event.listen("users.*", [UsersListener])
触发事件
要使用事件类触发事件,你可以使用 Event
类中的 fire
方法:
from app.events import UserAddedEvent
from masonite.events import Event
class RegisterController:
def register(self, event: Event):
# Register user
event.fire(UserAddedEvent)
要触发一个没有类的简单事件,你将使用相同的方法:
from app.events import UserAddedEvent
from masonite.events import Event
class RegisterController:
def register(self, event: Event):
# ...
# 注册用户
event.fire("users.added", user)
构建欢迎电子邮件监听器
例如,要构建一个发送电子邮件的监听器:
首先,创建监听器:
$ python craft listener WelcomeEmail
然后我们可以构建监听器。
要发送电子邮件,我们需要导入 mailable 类并使用容器中的 mail
键发送电子邮件:
from app.mailables.WelcomeMailable import WelcomeMailable
class WelcomeEmail:
def handle(self, event):
from wsgi import application
application.make("mail").send(
WelcomeMailable().to('idmann509@gmail.com')
)
然后,你可以在提供程序中注册事件:
class EventsProvider(Provider):
def register(self):
self.application.make('event').listen(UserAddedEvent, [WelcomeListener])
当你在控制器内或项目中的其他地方发出 UserAdded
事件时,它现在会发送此电子邮件。
只需向列表中添加更多监听器,你就可以将任意数量的监听器注册到事件中。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。