事件机制

未匹配的标注

事件

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.addedusers.updatedusers.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 事件时,它现在会发送此电子邮件。

只需向列表中添加更多监听器,你就可以将任意数量的监听器注册到事件中。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/4.0/fe...

译文地址:https://learnku.com/docs/masonite/4.0/fe...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~