自定义 Craft 命令

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

创建命令

介绍

通过使用 craft 命令和服务提供者给 Masonite 添加命令非常简单。如果您已经使用 Masonite 一段时间,那么您已经了解到了命令是非常重要的部分。创建命令并添加到 craft 来构建您可能经常使用的命令非常简单。

Masonite 使用 Cleo 包来创建和使用命令,有关如何使用命令,如何获取参数和选项以及如何在命令行上打印彩色文本请参考官方文档。

学习 Cleo 文档

开始

您可以使用 craft 本身来创建命令:

$ craft command Hello

这样将创建一个带有样板代码的 app/commands/HelloCommand.py 文件,如下:

app/commands/HelloCommand.py

""" A HelloCommand Command """
from cleo import Command

class HelloCommand(Command):
    """
    Description of command

    command:name
        {argument : description}
    """

    def handle(self):
        pass

让我们创建一个简单的 hello name 应用程序,将“ hello your-name” 打印到控制台。

在文档字符串中 command:name 的位置,我们将 hello 写进去,在参数部分,我们可以将 name 放那,如下所示:

app/commands/HelloCommand.py

""" A HelloCommand Command """
from cleo import Command

class HelloCommand(Command):
    """
    Say hello to you

    hello
        {name : Your name}
    """

    def handle(self):
        pass

handle 方法内部,我们可以通过指定 self.argument('name') 来接收参数。简单的说:

app/commands/HelloCommand.py

""" A HelloCommand Command """
from cleo import Command

class HelloCommand(Command):
    """
    Say hello to you

    hello
        {name : Your name}
    """

    def handle(self):
        print('Hello {0}'.format(self.argument('name')))

好了,现在,我们只需要将其添加到我们的 craft 命令中即可。

添加命令到 Craft

我们可以通过创建服务提供者并将命令注册到容器中来添加要制作的命令。 Craft 将在所有容器上自动运行所有注册方法,并检索所有命令。

让我们创建一个服务提供者:

$ craft provider HelloProvider

这将创建一个 app/providers/HelloProvider.py 文件,也就是我们的服务提供者。

app/providers/HelloProvider.py

''' A HelloProvider Service Provider '''
from masonite.provider import ServiceProvider

class HelloProvider(ServiceProvider):

    def register(self):
        pass

    def boot(self):
        pass

让我们导入我们的命令并注册到容器中。另外,因为我们只是将内容注册到容器中,所以我们可以设置 wsgi = False ,这样就不会在每个请求上运行而是在服务器启动之前运行它:

app/providers/HelloProvider.py

''' A HelloProvider Service Provider '''
from masonite.provider import ServiceProvider
from app.commands.HelloCommand import HelloCommand

class HelloProvider(ServiceProvider):

    wsgi = False

    def register(self):
        self.app.bind('HelloCommand', HelloCommand())

    def boot(self):
        pass

确保您实例化了命令。另外,命令名称必须以 “Command” 结尾。 因此,绑定 HelloCommand 将起作用,但绑定 Hello 无效。Craft 将匹配 Command 结尾的命令,同时也区分大小写,确保 Command 大写。

添加服务提供者

像往常一样,我们需要将我们的服务提供者添加到 config / providers.py 文件中的PROVIDERS 列表中:

config/providers.py

from app.providers.HelloProvider import HelloProvider

PROVIDERS = [
...
    # Application Providers
    UserModelProvider,
    MiddlewareProvider,

    # New Hello Provider
    HelloProvider,
]

好,现在我们执行:

$ craft

我们将看到新的 hello 命令:

  help              Displays help for a command
  hello             Say hello to you
  install           Installs all of Masonite's dependencies

如果我们运行:

$ craft hello Joseph

将看到以下输出:

Hello Joseph

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

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

原文地址:https://learnku.com/docs/masonite/2.3/th...

译文地址:https://learnku.com/docs/masonite/2.3/th...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 查看所有版本


暂无话题~