goravel
  • README
  • ORM
    • getting-started
    • Migrations
    • Relationships
  • Architecutre Concepts
    • Facades
    • Request Lifecycle
    • Service Container
    • Service Providers
  • Digging Deeper
    • Artisan Console
    • Cache
    • Events
    • File Storage
    • Helpers
    • Mail
    • Mock
    • Package Development
    • Queues
    • Task Scheduling
  • Getting Started
    • Compile
    • Configuration
    • Directory Structure
    • Installation
  • prologue
    • Contribution Guide
    • Excellent Extend Packages
  • security
    • Authentication
    • Authorization
    • Encryption
    • Hashing
  • The Basics
    • Controllers
    • Grpc
    • Logging
    • Middleware
    • HTTP Requests
    • HTTP Response
    • Routing
    • Validation
  • upgrade
    • History Upgrade
    • Upgrading To v1.1 From v1.0
    • Upgrading To v1.10 From v1.9
    • Upgrading To v1.11 From v1.10
    • Upgrading To v1.12 From v1.11
    • Upgrading To v1.2 From v1.1
    • Upgrading To v1.3 From v1.2
    • Upgrading To v1.4 From v1.3
    • Upgrading To v1.5 From v1.4
    • Upgrading To v1.6 From v1.5
    • Upgrading To v1.7 From v1.6
    • Upgrading To v1.8 From v1.7
    • Upgrading To v1.9 From v1.8
  • zh
    • ORM
      • 快速入门
      • 数据库迁移
      • 模型关联
    • 核心架构
      • Facades
      • 请求周期
      • 服务容器
      • 服务提供者
    • 综合话题
      • Artisan 命令行
      • 缓存系统
      • 事件系统
      • 文件存储
      • 辅助函数
      • 发送邮件
      • Mock
      • 扩展包开发
      • 队列
      • 任务调度
    • 入门指南
      • 编译
      • 配置信息
      • 文件夹结构
      • 安装
    • prologue
      • 贡献指南
      • 优秀扩展包
    • security
      • 用户认证
      • 用户授权
      • 加密解密
      • 哈希
    • 基本功能
      • 控制器
      • Grpc
      • 日志
      • HTTP 中间件
      • 请求
      • 响应
      • 路由
      • 表单验证
    • upgrade
      • 历史版本升级
      • 从 v1.0 升级到 v1.1
      • 从 v1.9 升级到 v1.10
      • 从 v1.10 升级到 v1.11
      • 从 v1.11 升级到 v1.12
      • 从 v1.1 升级到 v1.2
      • 从 v1.2 升级到 v1.3
      • 从 v1.3 升级到 v1.4
      • 从 v1.4 升级到 v1.5
      • 从 v1.5 升级到 v1.6
      • 从 v1.6 升级到 v1.7
      • 从 v1.7 升级到 v1.8
      • 从 v1.8 升级到 v1.9
Powered by GitBook
On this page
  • 简介
  • 生成命令
  • 命令结构
  • 定义输入
  • 参数
  • 选项
  • 分类
  • 注册命令
  • 以编程方式执行命令
Edit on GitHub
  1. zh
  2. 综合话题

Artisan 命令行

[[toc]]

简介

Artisan 是 Goravel 自带的命令行工具,该模块可以使用 facades.Artisan() 进行操作。它提供了许多有用的命令,这些命令可以在构建应用时为你提供帮助。你可以通过命令查看所有可用的 Artisan 命令:

go run . artisan list

每个命令都包含了「help」,它会显示和概述命令的可用参数及选项。只需要在命令前加上 help 即可查看命令帮助界面:

go run . artisan help migrate

如果您不想重复输入 go run . artisan ... 命令,你可以在终端中为这个命令添加一个别名:

echo -e "\r\nalias artisan=\"go run . artisan\"" >>~/.zshrc

随后您就可以简单的运行以下命令:

artisan make:controller DemoController

生成命令

使用 make:command 命令将在 app/console/commands 目录中创建一个新的命令。如果你的应用程序中不存在此目录,请不要担心,它将在你第一次运行 make:command 命令时自动创建:

go run . artisan make:command SendEmails
go run . artisan make:command user/SendEmails

命令结构

生成命令后,需要给该类的 signature 和 description 属性定义适当的值。执行命令时将调用handle方法。你可以将命令逻辑放在此方法中。

package commands

import (
  "github.com/goravel/framework/contracts/console"
  "github.com/goravel/framework/contracts/console/command"
)

type SendEmails struct {
}

//Signature The name and signature of the console command.
func (receiver *SendEmails) Signature() string {
  return "emails"
}

//Description The console command description.
func (receiver *SendEmails) Description() string {
  return "Send emails"
}

//Extend The console command extend.
func (receiver *SendEmails) Extend() command.Extend {
  return command.Extend{}
}

//Handle Execute the console command.
func (receiver *SendEmails) Handle(ctx console.Context) error {
  return nil
}

定义输入

在编写控制台命令时,通常是通过参数和选项来收集用户输入的。 Goravel 让你可以非常方便的获取用户输入的内容。

参数

直接在命令后跟参数:

go run . artisan send:emails NAME EMAIL

获取参数:

func (receiver *ListCommand) Handle(ctx console.Context) error {
  name := ctx.Argument(0)
  email := ctx.Argument(1)
  all := ctx.Arguments()

  return nil
}

选项

选项类似于参数,是用户输入的另一种形式。在命令行中指定选项的时候,它们以两个短横线 (–) 作为前缀。

定义:

func (receiver *ListCommand) Extend() command.Extend {
  return command.Extend{
    Flags: []command.Flag{
      &command.StringFlag{
        Name:    "lang",
        Value:   "default",
        Aliases: []string{"l"},
        Usage:   "language for the greeting",
      },
    },
  }
}

获取:

func (receiver *ListCommand) Handle(ctx console.Context) error {
  lang := ctx.Option("lang")

  return nil
}

使用:

go run . artisan emails --lang chinese
go run . artisan emails -l chinese

注意:同时使用参数与选项时,选项要在参数之前定义,例如:

// 正确
go run . artisan emails --lang chinese name
// 错误
go run . artisan emails name --lang chinese name

除了 command.StringFlag,我们还可以其他类型的 Flag 与 Option*:StringSliceFlag, BoolFlag, Float64Flag, Float64SliceFlag, IntFlag, IntSliceFlag, Int64Flag, Int64SliceFlag。

分类

可以将一组命令设置为同一个分类,方便在 go run . artisan list 中查看:

// Extend The console command extend.
func (receiver *ConsoleMakeCommand) Extend() command.Extend {
  return command.Extend{
    Category: "make",
  }
}

注册命令

你的所有命令都需要在 app\console\kernel.go 文件的 Commands 方法中注册。

func (kernel Kernel) Commands() []console.Command {
  return []console.Command{
    &commands.SendEmails{},
  }
}

以编程方式执行命令

有时你可能希望在 CLI 之外执行 Artisan 命令,可以使用 facades.Artisan() 上的 Call 方法来完成此操作。

facades.Route().GET("/", func(c *gin.Context) {
  facades.Artisan().Call("emails")
  facades.Artisan().Call("emails --lang chinese name") // 携带参数与选项
})
Previous综合话题Next缓存系统

Last updated 1 year ago