Skip to content

Console — 控制台应用

  • 文件位置: kernel/Foundation/Console/Console.php
  • 命名空间: kernel\Foundation\Console
  • 继承自: App
  • 是否可继承: 是

控制台应用入口,继承自 App。命令完全由本类实例管理,不再依赖 Router(Router 只负责 HTTP 路由)。Request 始终实例化(CLI 下其 URI 即命中的命令名)。提供命令注册、分发、参数解析、彩色输出与交互输入能力。

命令注册方式

命令通过本实例 register() / discover() 注册(存入实例级命令表 $commands)。业务方在各自 console 入口手动注册,内核命令在内核 kernel/console 入口注册。

命令处理器支持三种形式:

  1. 命令控制器类:实现 handle(Console $console, array $args, array $options): int,类放 Controller/ 目录。
  2. [类名, 方法名]:指定命令控制器中的处理方法(register 第二参传数组)。
  3. 闭包:function (Console $console, array $args, array $options): int

命令名支持冒号命名空间(如 make:controller);输入空参数、help-h--help 时自动列出全部已注册命令。

属性

属性类型默认可见性说明
$commandsarray<string, array>[]protected已注册的命令,值为 {handler, description}
$argvarray[]protected命令行参数(不含脚本名)
$commandNamestring""protected当前命令名
$argumentsarray[]protected位置参数
$optionsarray[]protected选项参数

方法速查表

方法作用
__construct($AppId, $KernelId)构建控制台应用并注册 CLI 异常/错误处理器
register($name, $handler, $description)注册命令
discover($directory, $namespace)从目录自动发现并注册命令类
commands()获取已注册的全部命令(本实例命令表)
command()获取当前命令名
argument($index, $default)获取位置参数
option($name, $default)获取选项值
handle($argv)分发执行命令
parseArguments($argv)解析命令行参数(protected)
isOption($arg)判断参数是否为选项形式(protected)
isOptionValue($argv, $nextIndex)判断下一参数是否为选项值(protected)
execute($command)执行命令处理器(protected)
listCommands($exitCode)输出帮助,列出所有命令(protected)
line($text, $color, $stream)输出一行文本
success($text)绿色成功输出
info($text)青色信息输出
warning($text)黄色警告输出
error($text)红色错误输出,写入 STDERR
supportsColor()是否支持 ANSI 颜色(protected)
ask($question, $default)提示输入
confirm($question, $default)确认询问
secret($question)静默输入(不回显)
run()覆写 App::run,执行命令分发并以退出码结束

方法

__construct($AppId = "kernel", $KernelId = "kernel") — 构建控制台应用

调用父类构造,捕获 GLOBALS['argv'](去掉脚本名),并注册 CLI 环境下的异常处理与错误处理:异常输出到 stderr 并以非 0 退出,非致命错误输出警告。

参数

参数类型默认说明
$AppIdstring"kernel"应用 ID
$KernelIdstring"kernel"内核 ID

返回值

  • 无。

register($name, $handler, $description) — 注册命令

参数

参数类型默认说明
$namestring命令名,如 "make:controller",支持冒号命名空间
$handlercallable|string闭包 function(Console, array $args, array $options): int,或命令类名(类需实现 handle(Console, array, array): int
$descriptionstring""命令说明,用于帮助列表

返回值

  • Console:当前实例(支持链式调用)。

discover($directory, $namespace) — 从目录自动发现命令类

扫描指定目录下所有 .php 文件,按 PSR-4 约定推断类名(命名空间 + 文件名)。类存在且定义了 $name 属性(命令名)即注册,$description 属性作为命令说明。目录不存在或无可发现命令时静默返回。

参数

参数类型默认说明
$directorystring命令类所在目录(绝对路径)
$namespacestring命令类命名空间,类名取文件名,如 "App\Commands"

返回值

  • Console:当前实例(支持链式调用)。

commands() — 获取已注册的全部命令

返回本实例 register()/discover() 注册的全部命令($this->commands)。

参数

  • 无。

返回值

  • array<string, array>:命令名 => 命令定义({handler, description})。

command() — 获取当前命令名

参数

  • 无。

返回值

  • string:当前命令名。

argument($index, $default) — 获取位置参数

参数

参数类型默认说明
$indexint参数下标,从 0 开始
$defaultmixednull不存在时返回的默认值

返回值

  • mixed:位置参数值。

option($name, $default) — 获取选项值

支持 --key=value--key value-k value--flag(布尔 true)。

参数

参数类型默认说明
$namestring选项名
$defaultmixednull不存在时返回的默认值

返回值

  • mixed:选项值。

handle($argv) — 分发执行命令

分发前触发生命周期"启动"钩子(bootUp),命令执行完毕(正常或异常)后触发"结束"钩子(shutdown)。命令抛出的异常会先执行错误钩子(onError)与结束钩子,再交由 CLI 异常处理器输出并退出。

参数

参数类型默认说明
$argvarraynull命令行参数(不含脚本名)。不传时使用构造时捕获的 GLOBALS['argv']

返回值

  • int:退出码。

parseArguments($argv) — 解析命令行参数

protected。第一个非选项参数作为命令名,其余为位置参数;选项支持 --key=value--key value-k value--flag

参数

参数类型默认说明
$argvarray参数数组

返回值

  • array[命令名, 位置参数, 选项]

isOption($arg) — 判断参数是否为选项形式

protected。

参数

参数类型默认说明
$argstring参数

返回值

  • bool:以 - 开头且长度大于 1 返回 true

isOptionValue($argv, $nextIndex) — 判断下一参数是否为选项值

protected。

参数

参数类型默认说明
$argvarray参数数组
$nextIndexint下一参数下标

返回值

  • bool:存在且非选项形式返回 true

execute($command) — 执行命令处理器

protected。命令定义统一为 handler 键:命令类名(调用 handle())、[类名, 方法名] 或闭包。

参数

参数类型默认说明
$commandarray命令定义

返回值

  • int:退出码。

listCommands($exitCode) — 输出帮助

protected。列出所有已注册命令及选项说明。

参数

参数类型默认说明
$exitCodeint0返回的退出码,help 场景为 0,命令不存在时传 1

返回值

  • int:退出码。

line($text, $color, $stream) — 输出一行文本

参数

参数类型默认说明
$textstring""文本
$colorstring|nullnullANSI 颜色码,如 "32" 绿色;null 无色
$streamresource|nullnull输出流,默认 STDOUT

返回值

  • Console:当前实例(支持链式调用)。

success($text) — 绿色成功输出

参数

参数类型默认说明
$textstring文本

返回值

  • Console:当前实例(支持链式调用)。

info($text) — 青色信息输出

参数

参数类型默认说明
$textstring文本

返回值

  • Console:当前实例(支持链式调用)。

warning($text) — 黄色警告输出

参数

参数类型默认说明
$textstring文本

返回值

  • Console:当前实例(支持链式调用)。

error($text) — 红色错误输出

输出到 STDERR

参数

参数类型默认说明
$textstring文本

返回值

  • Console:当前实例(支持链式调用)。

supportsColor() — 是否支持 ANSI 颜色

protected。TTY 且未设置 NO_COLOR 环境变量时支持。

参数

  • 无。

返回值

  • bool:支持返回 true,否则 false

ask($question, $default) — 提示输入

参数

参数类型默认说明
$questionstring问题
$defaultmixednull默认值,回车直接使用

返回值

  • string:输入内容。

confirm($question, $default) — 确认询问

参数

参数类型默认说明
$questionstring问题
$defaultbooltrue默认值,回车直接使用

返回值

  • bool:输入 y/yes 返回 true,否则按默认或 false

secret($question) — 静默输入

用于密码等敏感信息。Unix 下通过 stty 关闭回显。

参数

参数类型默认说明
$questionstring问题

返回值

  • string:输入内容。

run() — 运行控制台

覆写 App::run(),执行命令分发并以退出码结束进程。

参数

  • 无。

返回值

  • 无(内部 exit())。

示例

入口脚本 kernel/console

php
$console = new Console("kernel");
$console->run(); // 内部调用 handle() 分发命令并以退出码结束

命令行调用:

bash
php kernel/console make:app hello --name=john