Facade 机制

未匹配的标注

Facades(门面) 是一种访问 Service Container(服务容器) 类的简单方法,而无需从 Service Container(服务容器) 中创建它们。

概览

Facades(门面) 只是解析 Service Container(服务容器) 中的键的快捷方式。而不是这样做:

application.make("mail").send()

你可以这样做:

from masonite.facades import Mail

Mail.send()

要导入任何内置 Facades 门面门面类,你可以从 masonite.facades 命名空间导入它们:

from masonite.facades import Request

def show(self):
    avatar = Request.input('avatar_url')

内置门面类

Masonite 附带多个 Facades 门面,你可以开箱即用:

  • Auth
  • Broadcast
  • Config
  • Dump
  • Gate
  • Hash
  • Loader
  • Mail
  • Notification
  • Queue
  • Request
  • Response
  • Session
  • Storage
  • View
  • Url

创建自己的 Facades 门面

创建自己的 Facades 门面很简单:

from masonite.facades import Facade

class YourFacade(metaclass=Facade):
  key = 'container_key'

然后导入并使用你的 Facades 门面:

from app.facades import YourFacade

YourFacade.method()

To benefit from code intellisense/type hinting when using Facade (e.g. in VSCode editor) you should create a .pyi file just next to your facade file class to add type hinting to your new facade.

要在使用 Facade(例如在 VSCode 编辑器中)时从代码智能感知/类型提示中受益,你应该在Facade 文件类旁边创建一个 .pyi 文件,以便为新门面添加类型提示。

然后在这个 Facade 中你应该声明你的类型化方法。这是邮件外观类型提示的部分示例:

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from ..mail import Mailable

class Mail:
    """Handle sending e-mails from Masonite via different drivers."""

    def mailable(mailable: "Mailable") -> "Mail":
        ...
    def send(driver: str = None):
        ...

请注意:

  • 方法代码不存在,但替换为 ...
  • 方法不接收 self 作为第一个参数。因为在调用外观时,我们并没有真正实例化它(即使我们获得了绑定到容器的对象实例)。这允许具有正确的类型提示行为。

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

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

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

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

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


暂无话题~