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
作为第一个参数。因为在调用外观时,我们并没有真正实例化它(即使我们获得了绑定到容器的对象实例)。这允许具有正确的类型提示行为。
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。