0 关注者

类 yii\helpers\Console

继承关系yii\helpers\Console » yii\helpers\BaseConsole
可用版本2.0
源代码 https://github.com/yiisoft/yii2/blob/master/framework/helpers/Console.php

Console 助手提供了用于命令行相关任务的有用方法,例如获取输入或格式化和着色输出。

公共方法

隐藏继承的方法

方法 描述 定义于
ansiColorizedSubstr() 返回由开始和长度参数指定的字符串中包含 ANSI 颜色代码的部分。 yii\helpers\BaseConsole
ansiFormat() 将返回使用给定 ANSI 样式格式化的字符串。 yii\helpers\BaseConsole
ansiFormatCode() 返回 ANSI 格式代码。 yii\helpers\BaseConsole
ansiStrlen() 返回字符串的长度,不包含 ANSI 颜色代码。 yii\helpers\BaseConsole
ansiStrwidth() 返回字符串的宽度,不包含 ANSI 颜色代码。 yii\helpers\BaseConsole
ansiToHtml() 将 ANSI 格式化的字符串转换为 HTML。 yii\helpers\BaseConsole
beginAnsiFormat() 回显一个 ANSI 格式代码,该代码会影响之后打印的任何文本的格式。 yii\helpers\BaseConsole
clearLine() 清除光标当前所在的行,通过向终端发送带参数 2 的 ANSI 控制代码 EL。 yii\helpers\BaseConsole
clearLineAfterCursor() 清除从光标位置到行尾的文本,通过向终端发送带参数 0 的 ANSI 控制代码 EL。 yii\helpers\BaseConsole
clearLineBeforeCursor() 清除从光标位置到行首的文本,通过向终端发送带参数 1 的 ANSI 控制代码 EL。 yii\helpers\BaseConsole
clearScreen() 清除整个屏幕内容,通过向终端发送带参数 2 的 ANSI 控制代码 ED。 yii\helpers\BaseConsole
clearScreenAfterCursor() 清除从光标到屏幕尾部的文本,通过向终端发送带参数 0 的 ANSI 控制代码 ED。 yii\helpers\BaseConsole
clearScreenBeforeCursor() 清除从光标到屏幕开头的文本,通过向终端发送带参数 1 的 ANSI 控制代码 ED。 yii\helpers\BaseConsole
confirm() 询问用户确认,通过输入 y 或 n。 yii\helpers\BaseConsole
endAnsiFormat() 重置之前方法 beginAnsiFormat() 设置的任何 ANSI 格式。此之后的所有输出都将具有默认文本格式。 yii\helpers\BaseConsole
endProgress() 结束由 startProgress() 启动的进度条。 yii\helpers\BaseConsole
error() 将文本打印到 STDERR,并在末尾附加回车符 (PHP_EOL)。 yii\helpers\BaseConsole
errorSummary() 生成验证错误的摘要。 yii\helpers\BaseConsole
escape() 转义 % 以便它们在字符串由 renderColoredString() 解析时不会被解释为颜色代码。 yii\helpers\BaseConsole
getScreenSize() 返回终端屏幕尺寸。 yii\helpers\BaseConsole
hideCursor() 通过向终端发送 ANSI DECTCEM 代码 ?25l 隐藏光标。 yii\helpers\BaseConsole
input() 询问用户输入。当用户键入回车符 (PHP_EOL) 时结束。可选地,它还提供提示。 yii\helpers\BaseConsole
isRunningOnWindows() 如果控制台在 Windows 上运行,则返回 true。 yii\helpers\BaseConsole
markdownToAnsi() 通过应用一些 ANSI 格式,将 Markdown 转换为在控制台环境中更易于阅读的格式。 yii\helpers\BaseConsole
moveCursorBackward() 通过向终端发送 ANSI 控制代码 CUB 将终端光标向后移动。 yii\helpers\BaseConsole
moveCursorDown() 通过向终端发送 ANSI 控制代码 CUD 将终端光标向下移动。 yii\helpers\BaseConsole
moveCursorForward() 通过向终端发送 ANSI 控制代码 CUF 将终端光标向前移动。 yii\helpers\BaseConsole
moveCursorNextLine() 通过向终端发送 ANSI 控制代码 CNL 将终端光标移动到下一行的开头。 yii\helpers\BaseConsole
moveCursorPrevLine() 通过向终端发送 ANSI 控制代码 CPL 将终端光标移动到上一行的开头。 yii\helpers\BaseConsole
moveCursorTo() 通过向终端发送 ANSI 控制代码 CUP 或 CHA 将光标移动到给定的列和行绝对位置。 yii\helpers\BaseConsole
moveCursorUp() 通过向终端发送 ANSI 控制代码 CUU 将终端光标向上移动。 yii\helpers\BaseConsole
output() 将文本打印到 STDOUT,并在末尾附加回车符 (PHP_EOL)。 yii\helpers\BaseConsole
prompt() 提示用户输入并验证它。 yii\helpers\BaseConsole
renderColoredString() 通过替换诸如 %y(用于黄色)之类的模式为 ansi 控制代码,将字符串转换为 ansi 格式。 yii\helpers\BaseConsole
restoreCursorPosition() 通过向终端发送 ANSI 控制代码 RCP 恢复使用 saveCursorPosition() 保存的光标位置。 yii\helpers\BaseConsole
saveCursorPosition() 通过向终端发送 ANSI 控制代码 SCP 保存当前光标位置。 yii\helpers\BaseConsole
scrollDown() 通过向终端发送 ANSI 控制代码 SD 向下滚动整页。 yii\helpers\BaseConsole
scrollUp() 通过向终端发送 ANSI 控制代码 SU 向上滚动整页。 yii\helpers\BaseConsole
select() 让用户选择一个选项。输入“?”将显示要选择的选项列表及其说明。 yii\helpers\BaseConsole
showCursor() 当光标已由 hideCursor() 隐藏时,将再次显示光标,通过向终端发送 ANSI DECTCEM 代码 ?25h。 yii\helpers\BaseConsole
startProgress() 在屏幕上开始显示进度条。 yii\helpers\BaseConsole
stderr() 将字符串打印到 STDERR。 yii\helpers\BaseConsole
stdin() 从 STDIN 获取输入并返回一个针对 EOLs 右修剪的字符串。 yii\helpers\BaseConsole
stdout() 将字符串打印到 STDOUT。 yii\helpers\BaseConsole
streamSupportsAnsiColors() 如果流支持着色,则返回 true。如果流不支持,则禁用 ANSI 颜色。 yii\helpers\BaseConsole
stripAnsiFormat() 从字符串中删除 ANSI 控制代码。 yii\helpers\BaseConsole
updateProgress() 更新由 startProgress() 启动的进度条。 yii\helpers\BaseConsole
wrapText() 使用缩进换行文本以适应屏幕尺寸。 yii\helpers\BaseConsole
xtermBgColor() 返回 xterm 背景颜色的 ansi 格式代码。 yii\helpers\BaseConsole
xtermFgColor() 返回 xterm 前景色颜色的 ansi 格式代码。 yii\helpers\BaseConsole

方法详情

隐藏继承的方法

ansiColorizedSubstr() 公共静态方法

定义于: yii\helpers\BaseConsole::ansiColorizedSubstr()

返回由开始和长度参数指定的字符串中包含 ANSI 颜色代码的部分。

如果字符串包含颜色代码,则将返回“TEXT_COLOR + TEXT_STRING + DEFAULT_COLOR”,否则将简单地返回“TEXT_STRING”。

public static string ansiColorizedSubstr ( $string, $start, $length )
$string 字符串
$start 整数
$length 整数

                public static function ansiColorizedSubstr($string, $start, $length)
{
    if ($start < 0 || $length <= 0) {
        return '';
    }
    $textItems = preg_split(self::ansiCodesPattern(), (string)$string);
    preg_match_all(self::ansiCodesPattern(), (string)$string, $colors);
    $colors = count($colors) ? $colors[0] : [];
    array_unshift($colors, '');
    $result = '';
    $curPos = 0;
    $inRange = false;
    foreach ($textItems as $k => $textItem) {
        $color = $colors[$k];
        if ($curPos <= $start && $start < $curPos + Console::ansiStrwidth($textItem)) {
            $text = mb_substr($textItem, $start - $curPos, null, Yii::$app->charset);
            $inRange = true;
        } else {
            $text = $textItem;
        }
        if ($inRange) {
            $result .= $color . $text;
            $diff = $length - Console::ansiStrwidth($result);
            if ($diff <= 0) {
                if ($diff < 0) {
                    $result = mb_substr($result, 0, $diff, Yii::$app->charset);
                }
                $defaultColor = static::renderColoredString('%n');
                if ($color && $color != $defaultColor) {
                    $result .= $defaultColor;
                }
                break;
            }
        }
        $curPos += mb_strlen($textItem, Yii::$app->charset);
    }
    return $result;
}

            
ansiFormat() 公共静态方法

定义于: yii\helpers\BaseConsole::ansiFormat()

将返回使用给定 ANSI 样式格式化的字符串。

public static string ansiFormat ( $string, $format = [] )
$string 字符串

要格式化的字符串

$format 数组

包含格式化值的数组。您可以传递任何 FG_*BG_*TEXT_* 常量,还可以传递 xtermFgColor()xtermBgColor() 来指定格式。

                public static function ansiFormat($string, $format = [])
{
    $code = implode(';', $format);
    return "\033[0m" . ($code !== '' ? "\033[" . $code . 'm' : '') . $string . "\033[0m";
}

            
ansiFormatCode() 公共静态方法

定义于: yii\helpers\BaseConsole::ansiFormatCode()

返回 ANSI 格式代码。

public static string ansiFormatCode ( $format )
$format 数组

包含格式化值的数组。您可以传递任何 FG_*BG_*TEXT_* 常量,还可以传递 xtermFgColor()xtermBgColor() 来指定格式。

返回 字符串

根据给定的格式化常量返回 ANSI 格式代码。

                public static function ansiFormatCode($format)
{
    return "\033[" . implode(';', $format) . 'm';
}

            
ansiStrlen() 公共静态方法

定义于: yii\helpers\BaseConsole::ansiStrlen()

返回字符串的长度,不包含 ANSI 颜色代码。

public static integer ansiStrlen ( $string )
$string 字符串

要测量的字符串

返回 整数

字符串的长度,不包括 ANSI 格式字符

                public static function ansiStrlen($string)
{
    return mb_strlen(static::stripAnsiFormat($string));
}

            
ansiStrwidth() 公共静态方法 (自版本 2.0.36 起可用)

定义于: yii\helpers\BaseConsole::ansiStrwidth()

返回字符串的宽度,不包含 ANSI 颜色代码。

public static integer ansiStrwidth ( $string )
$string 字符串

要测量的字符串

返回 整数

字符串的宽度,不包括 ANSI 格式字符

                public static function ansiStrwidth($string)
{
    return mb_strwidth(static::stripAnsiFormat($string), Yii::$app->charset);
}

            
ansiToHtml() 公共静态方法

定义于: yii\helpers\BaseConsole::ansiToHtml()

将 ANSI 格式化的字符串转换为 HTML。

注意:目前不支持 xTerm 256 位颜色。

public static string ansiToHtml ( $string, $styleMap = [] )
$string 字符串

要转换的字符串。

$styleMap 数组

ANSI 控制代码(如 FG_COLORBOLD)到一组 CSS 样式定义的可选映射。CSS 样式定义表示为一个数组,其中数组键对应于 CSS 样式属性名称,值是 CSS 值。值可以是数组,在渲染时将合并并用 ' ' 连接。

返回 字符串

ANSI 格式化字符串的 HTML 表示形式

                public static function ansiToHtml($string, $styleMap = [])
{
    $styleMap = [
        // https://www.w3.org/TR/CSS2/syndata.html#value-def-color
        self::FG_BLACK => ['color' => 'black'],
        self::FG_BLUE => ['color' => 'blue'],
        self::FG_CYAN => ['color' => 'aqua'],
        self::FG_GREEN => ['color' => 'lime'],
        self::FG_GREY => ['color' => 'silver'],
        // https://meyerweb.com/eric/thoughts/2014/06/19/rebeccapurple/
        // https://drafts.csswg.org/css-color/#valuedef-rebeccapurple
        self::FG_PURPLE => ['color' => 'rebeccapurple'],
        self::FG_RED => ['color' => 'red'],
        self::FG_YELLOW => ['color' => 'yellow'],
        self::BG_BLACK => ['background-color' => 'black'],
        self::BG_BLUE => ['background-color' => 'blue'],
        self::BG_CYAN => ['background-color' => 'aqua'],
        self::BG_GREEN => ['background-color' => 'lime'],
        self::BG_GREY => ['background-color' => 'silver'],
        self::BG_PURPLE => ['background-color' => 'rebeccapurple'],
        self::BG_RED => ['background-color' => 'red'],
        self::BG_YELLOW => ['background-color' => 'yellow'],
        self::BOLD => ['font-weight' => 'bold'],
        self::ITALIC => ['font-style' => 'italic'],
        self::UNDERLINE => ['text-decoration' => ['underline']],
        self::OVERLINED => ['text-decoration' => ['overline']],
        self::CROSSED_OUT => ['text-decoration' => ['line-through']],
        self::BLINK => ['text-decoration' => ['blink']],
        self::CONCEALED => ['visibility' => 'hidden'],
    ] + $styleMap;
    $tags = 0;
    $result = preg_replace_callback(
        '/\033\[([\d;]+)m/',
        function ($ansi) use (&$tags, $styleMap) {
            $style = [];
            $reset = false;
            $negative = false;
            foreach (explode(';', $ansi[1]) as $controlCode) {
                if ($controlCode == 0) {
                    $style = [];
                    $reset = true;
                } elseif ($controlCode == self::NEGATIVE) {
                    $negative = true;
                } elseif (isset($styleMap[$controlCode])) {
                    $style[] = $styleMap[$controlCode];
                }
            }
            $return = '';
            while ($reset && $tags > 0) {
                $return .= '</span>';
                $tags--;
            }
            if (empty($style)) {
                return $return;
            }
            $currentStyle = [];
            foreach ($style as $content) {
                $currentStyle = ArrayHelper::merge($currentStyle, $content);
            }
            // if negative is set, invert background and foreground
            if ($negative) {
                if (isset($currentStyle['color'])) {
                    $fgColor = $currentStyle['color'];
                    unset($currentStyle['color']);
                }
                if (isset($currentStyle['background-color'])) {
                    $bgColor = $currentStyle['background-color'];
                    unset($currentStyle['background-color']);
                }
                if (isset($fgColor)) {
                    $currentStyle['background-color'] = $fgColor;
                }
                if (isset($bgColor)) {
                    $currentStyle['color'] = $bgColor;
                }
            }
            $styleString = '';
            foreach ($currentStyle as $name => $value) {
                if (is_array($value)) {
                    $value = implode(' ', $value);
                }
                $styleString .= "$name: $value;";
            }
            $tags++;
            return "$return<span style=\"$styleString\">";
        },
        $string
    );
    while ($tags > 0) {
        $result .= '</span>';
        $tags--;
    }
    return $result;
}

            
beginAnsiFormat() 公共静态方法

定义于: yii\helpers\BaseConsole::beginAnsiFormat()

回显一个 ANSI 格式代码,该代码会影响之后打印的任何文本的格式。

另请参阅

public static void beginAnsiFormat ( $format )
$format 数组

包含格式化值的数组。您可以传递任何 FG_*BG_*TEXT_* 常量,还可以传递 xtermFgColor()xtermBgColor() 来指定格式。

                public static function beginAnsiFormat($format)
{
    echo "\033[" . implode(';', $format) . 'm';
}

            
clearLine() 公共静态方法

定义于: yii\helpers\BaseConsole::clearLine()

清除光标当前所在的行,通过向终端发送带参数 2 的 ANSI 控制代码 EL。

光标位置不会改变。

public static void clearLine ( )

                public static function clearLine()
{
    echo "\033[2K";
}

            
clearLineAfterCursor() 公共静态方法

定义于: yii\helpers\BaseConsole::clearLineAfterCursor()

清除从光标位置到行尾的文本,通过向终端发送带参数 0 的 ANSI 控制代码 EL。

光标位置不会改变。

public static void clearLineAfterCursor ( )

                public static function clearLineAfterCursor()
{
    echo "\033[0K";
}

            
clearLineBeforeCursor() 公共静态方法

定义于: yii\helpers\BaseConsole::clearLineBeforeCursor()

清除从光标位置到行首的文本,通过向终端发送带参数 1 的 ANSI 控制代码 EL。

光标位置不会改变。

public static void clearLineBeforeCursor ( )

                public static function clearLineBeforeCursor()
{
    echo "\033[1K";
}

            
clearScreen() 公共静态方法

定义于: yii\helpers\BaseConsole::clearScreen()

清除整个屏幕内容,通过向终端发送带参数 2 的 ANSI 控制代码 ED。

光标位置不会改变。注意: Windows 中使用的 ANSI.SYS 实现会将光标位置重置到屏幕的左上角。

public static void clearScreen ( )

                public static function clearScreen()
{
    echo "\033[2J";
}

            
clearScreenAfterCursor() 公共静态方法

定义于: yii\helpers\BaseConsole::clearScreenAfterCursor()

清除从光标到屏幕尾部的文本,通过向终端发送带参数 0 的 ANSI 控制代码 ED。

光标位置不会改变。

public static void clearScreenAfterCursor ( )

                public static function clearScreenAfterCursor()
{
    echo "\033[0J";
}

            
clearScreenBeforeCursor() 公共静态方法

定义于: yii\helpers\BaseConsole::clearScreenBeforeCursor()

清除从光标到屏幕开头的文本,通过向终端发送带参数 1 的 ANSI 控制代码 ED。

光标位置不会改变。

public static void clearScreenBeforeCursor ( )

                public static function clearScreenBeforeCursor()
{
    echo "\033[1J";
}

            
confirm() 公共静态方法

定义于: yii\helpers\BaseConsole::confirm()

询问用户确认,通过输入 y 或 n。

典型用法如下所示

if (Console::confirm("Are you sure?")) {
    echo "user typed yes\n";
} else {
    echo "user typed no\n";
}
public static boolean confirm ( $message, $default false )
$message 字符串

在等待用户输入之前打印出来

$default 布尔值

如果未进行选择,则返回此值。

返回 布尔值

用户是否确认

                public static function confirm($message, $default = false)
{
    while (true) {
        static::stdout($message . ' (yes|no) [' . ($default ? 'yes' : 'no') . ']:');
        $input = trim(static::stdin());
        if (empty($input)) {
            return $default;
        }
        if (!strcasecmp($input, 'y') || !strcasecmp($input, 'yes')) {
            return true;
        }
        if (!strcasecmp($input, 'n') || !strcasecmp($input, 'no')) {
            return false;
        }
    }
}

            
endAnsiFormat() 公共静态方法

定义于: yii\helpers\BaseConsole::endAnsiFormat()

重置之前方法 beginAnsiFormat() 设置的任何 ANSI 格式。此之后的所有输出都将具有默认文本格式。

这等同于调用。

echo Console::ansiFormatCode([Console::RESET])
public static void endAnsiFormat ( )

                public static function endAnsiFormat()
{
    echo "\033[0m";
}

            
endProgress() 公共静态方法

定义于: yii\helpers\BaseConsole::endProgress()

结束由 startProgress() 启动的进度条。

另请参阅

public static void endProgress ( $remove false, $keepPrefix true )
$remove 字符串|布尔值

可以为 false 以将进度条保留在屏幕上并仅打印换行符。如果设置为 true,则进度条的行将被清除。这也可以是显示的字符串,而不是进度条。

$keepPrefix 布尔值

当进度条被移除时是否保留为进度条指定的前缀。默认为 true。

                public static function endProgress($remove = false, $keepPrefix = true)
{
    if ($remove === false) {
        static::stdout(PHP_EOL);
    } else {
        if (static::streamSupportsAnsiColors(STDOUT)) {
            static::clearLine();
        }
        static::stdout("\r" . ($keepPrefix ? self::$_progressPrefix : '') . (is_string($remove) ? $remove : ''));
    }
    flush();
    self::$_progressStart = null;
    self::$_progressWidth = null;
    self::$_progressPrefix = '';
    self::$_progressEta = null;
    self::$_progressEtaLastDone = 0;
    self::$_progressEtaLastUpdate = null;
}

            
error() 公共静态方法

定义于: yii\helpers\BaseConsole::error()

将文本打印到 STDERR,并在末尾附加回车符 (PHP_EOL)。

public static 整数|布尔值 error ( $string null )
$string 字符串|

要打印的文本

返回 整数|布尔值

打印的字节数或错误时的 false。

                public static function error($string = null)
{
    return static::stderr($string . PHP_EOL);
}

            
errorSummary() 公共静态方法 (自版本 2.0.14 起可用)

定义于: yii\helpers\BaseConsole::errorSummary()

生成验证错误的摘要。

public static 字符串 errorSummary ( $models, $options = [] )
$models yii\base\Model|yii\base\Model[]

要显示其验证错误的模型。

$options 数组

名称-值对形式的标签选项。以下选项将被特殊处理

  • showAllErrors: 布尔值,如果设置为 true,则将显示每个属性的每个错误消息,否则仅显示每个属性的第一个错误消息。默认为 false
返回 字符串

生成的错误摘要

                public static function errorSummary($models, $options = [])
{
    $showAllErrors = ArrayHelper::remove($options, 'showAllErrors', false);
    $lines = self::collectErrors($models, $showAllErrors);
    return implode(PHP_EOL, $lines);
}

            
escape() 公共静态方法

定义于: yii\helpers\BaseConsole::escape()

转义 % 以便它们在字符串由 renderColoredString() 解析时不会被解释为颜色代码。

public static 字符串 escape ( $string )
$string 字符串

要转义的字符串

                public static function escape($string)
{
    // TODO rework/refactor according to https://github.com/yiisoft/yii2/issues/746
    return str_replace('%', '%%', $string);
}

            
getScreenSize() 公共静态方法

定义于: yii\helpers\BaseConsole::getScreenSize()

返回终端屏幕尺寸。

用法

list($width, $height) = ConsoleHelper::getScreenSize();
public static 数组|布尔值 getScreenSize ( $refresh false )
$refresh 布尔值

是否强制检查而不重用缓存的大小值。这对于检测应用程序运行期间窗口大小的变化很有用,但在每个终端上可能无法获得最新的值。

返回 数组|布尔值

($width, $height) 的数组或无法确定大小时的 false。

                public static function getScreenSize($refresh = false)
{
    static $size;
    static $execDisabled;
    if ($size !== null && ($execDisabled || !$refresh)) {
        return $size;
    }
    if ($execDisabled === null) {
        $execDisabled = !function_exists('ini_get') || preg_match('/(\bexec\b)/i', ini_get('disable_functions'));
        if ($execDisabled) {
            return $size = false;
        }
    }
    if (static::isRunningOnWindows()) {
        $output = [];
        exec('mode con', $output);
        if (isset($output[1]) && strpos($output[1], 'CON') !== false) {
            return $size = [(int) preg_replace('~\D~', '', $output[4]), (int) preg_replace('~\D~', '', $output[3])];
        }
    } else {
        // try stty if available
        $stty = [];
        if (exec('stty -a 2>&1', $stty)) {
            $stty = implode(' ', $stty);
            // Linux stty output
            if (preg_match('/rows\s+(\d+);\s*columns\s+(\d+);/mi', $stty, $matches)) {
                return $size = [(int) $matches[2], (int) $matches[1]];
            }
            // MacOS stty output
            if (preg_match('/(\d+)\s+rows;\s*(\d+)\s+columns;/mi', $stty, $matches)) {
                return $size = [(int) $matches[2], (int) $matches[1]];
            }
        }
        // fallback to tput, which may not be updated on terminal resize
        if (($width = (int) exec('tput cols 2>&1')) > 0 && ($height = (int) exec('tput lines 2>&1')) > 0) {
            return $size = [$width, $height];
        }
        // fallback to ENV variables, which may not be updated on terminal resize
        if (($width = (int) getenv('COLUMNS')) > 0 && ($height = (int) getenv('LINES')) > 0) {
            return $size = [$width, $height];
        }
    }
    return $size = false;
}

            
hideCursor() 公共静态方法

定义于: yii\helpers\BaseConsole::hideCursor()

通过向终端发送 ANSI DECTCEM 代码 ?25l 隐藏光标。

使用 showCursor() 将其恢复。不要忘记在应用程序退出时显示光标。退出后,光标可能会在终端中保持隐藏状态。

public static void hideCursor ( )

                public static function hideCursor()
{
    echo "\033[?25l";
}

            
input() 公共静态方法

定义于: yii\helpers\BaseConsole::input()

询问用户输入。当用户键入回车符 (PHP_EOL) 时结束。可选地,它还提供提示。

public static 字符串 input ( $prompt null )
$prompt 字符串|

在等待输入之前显示的提示(可选)

返回 字符串

用户的输入

                public static function input($prompt = null)
{
    if (isset($prompt)) {
        static::stdout($prompt);
    }
    return static::stdin();
}

            
isRunningOnWindows() 公共静态方法

定义于: yii\helpers\BaseConsole::isRunningOnWindows()

如果控制台在 Windows 上运行,则返回 true。

public static 布尔值 isRunningOnWindows ( )

                public static function isRunningOnWindows()
{
    return DIRECTORY_SEPARATOR === '\\';
}

            
markdownToAnsi() 公共静态方法

定义于: yii\helpers\BaseConsole::markdownToAnsi()

通过应用一些 ANSI 格式,将 Markdown 转换为在控制台环境中更易于阅读的格式。

public static string markdownToAnsi ( $markdown )
$markdown 字符串

Markdown 字符串。

返回 字符串

解析结果,以 ANSI 格式化的字符串表示。

                public static function markdownToAnsi($markdown)
{
    $parser = new ConsoleMarkdown();
    return $parser->parse($markdown);
}

            
moveCursorBackward() 公共静态方法

定义于: yii\helpers\BaseConsole::moveCursorBackward()

通过向终端发送 ANSI 控制代码 CUB 将终端光标向后移动。

如果光标已在屏幕边缘,则此操作无效。

public static void moveCursorBackward ( $steps 1 )
$steps 整数

光标应向后移动的步数

                public static function moveCursorBackward($steps = 1)
{
    echo "\033[" . (int) $steps . 'D';
}

            
moveCursorDown() 公共静态方法

定义于: yii\helpers\BaseConsole::moveCursorDown()

通过向终端发送 ANSI 控制代码 CUD 将终端光标向下移动。

如果光标已在屏幕边缘,则此操作无效。

public static void moveCursorDown ( $rows 1 )
$rows 整数

光标应向下移动的行数

                public static function moveCursorDown($rows = 1)
{
    echo "\033[" . (int) $rows . 'B';
}

            
moveCursorForward() 公共静态方法

定义于: yii\helpers\BaseConsole::moveCursorForward()

通过向终端发送 ANSI 控制代码 CUF 将终端光标向前移动。

如果光标已在屏幕边缘,则此操作无效。

public static void moveCursorForward ( $steps 1 )
$steps 整数

光标应向前移动的步数

                public static function moveCursorForward($steps = 1)
{
    echo "\033[" . (int) $steps . 'C';
}

            
moveCursorNextLine() 公共静态方法

定义于: yii\helpers\BaseConsole::moveCursorNextLine()

通过向终端发送 ANSI 控制代码 CNL 将终端光标移动到下一行的开头。

public static void moveCursorNextLine ( $lines 1 )
$lines 整数

光标应向下移动的行数

                public static function moveCursorNextLine($lines = 1)
{
    echo "\033[" . (int) $lines . 'E';
}

            
moveCursorPrevLine() 公共静态方法

定义于: yii\helpers\BaseConsole::moveCursorPrevLine()

通过向终端发送 ANSI 控制代码 CPL 将终端光标移动到上一行的开头。

public static void moveCursorPrevLine ( $lines 1 )
$lines 整数

光标应向上移动的行数

                public static function moveCursorPrevLine($lines = 1)
{
    echo "\033[" . (int) $lines . 'F';
}

            
moveCursorTo() 公共静态方法

定义于: yii\helpers\BaseConsole::moveCursorTo()

通过向终端发送 ANSI 控制代码 CUP 或 CHA 将光标移动到给定的列和行绝对位置。

public static void moveCursorTo ( $column, $row null )
$column 整数

基于 1 的列号,1 是屏幕的左边缘。

$row integer|null

基于 1 的行号,1 是屏幕的上边缘。如果未设置,则只会将光标移动到当前行。

                public static function moveCursorTo($column, $row = null)
{
    if ($row === null) {
        echo "\033[" . (int) $column . 'G';
    } else {
        echo "\033[" . (int) $row . ';' . (int) $column . 'H';
    }
}

            
moveCursorUp() 公共静态方法

定义于: yii\helpers\BaseConsole::moveCursorUp()

通过向终端发送 ANSI 控制代码 CUU 将终端光标向上移动。

如果光标已在屏幕边缘,则此操作无效。

public static void moveCursorUp ( $rows 1 )
$rows 整数

光标应向上移动的行数

                public static function moveCursorUp($rows = 1)
{
    echo "\033[" . (int) $rows . 'A';
}

            
output() 公共静态方法

定义于: yii\helpers\BaseConsole::output()

将文本打印到 STDOUT,并在末尾附加回车符 (PHP_EOL)。

public static integer|boolean output ( $string null )
$string 字符串|

要打印的文本

返回 整数|布尔值

打印的字节数或错误时的 false。

                public static function output($string = null)
{
    return static::stdout($string . PHP_EOL);
}

            
prompt() 公共静态方法

定义于: yii\helpers\BaseConsole::prompt()

提示用户输入并验证它。

public static string prompt ( $text, $options = [] )
$text 字符串

提示字符串

$options 数组

用于验证输入的选项

  • required:是否必填
  • default:如果用户没有输入,则使用默认值
  • pattern:验证用户输入的正则表达式模式
  • validator:一个可调用的函数来验证输入。该函数必须接受两个参数
  • input:要验证的用户输入
  • error:如果验证失败,则通过引用传递的错误值。
返回 字符串

用户输入

                public static function prompt($text, $options = [])
{
    $options = ArrayHelper::merge(
        [
            'required' => false,
            'default' => null,
            'pattern' => null,
            'validator' => null,
            'error' => 'Invalid input.',
        ],
        $options
    );
    $error = null;
    top:
    $input = $options['default']
        ? static::input("$text [" . $options['default'] . '] ')
        : static::input("$text ");
    if ($input === '') {
        if (isset($options['default'])) {
            $input = $options['default'];
        } elseif ($options['required']) {
            static::output($options['error']);
            goto top;
        }
    } elseif ($options['pattern'] && !preg_match($options['pattern'], $input)) {
        static::output($options['error']);
        goto top;
    } elseif ($options['validator'] && !call_user_func_array($options['validator'], [$input, &$error])) {
        static::output(isset($error) ? $error : $options['error']);
        goto top;
    }
    return $input;
}

            
renderColoredString() 公共静态方法

定义于: yii\helpers\BaseConsole::renderColoredString()

通过替换诸如 %y(用于黄色)之类的模式为 ansi 控制代码,将字符串转换为 ansi 格式。

使用与 https://github.com/pear/Console_Color2/blob/master/Console/Color2.php 几乎相同的语法。转换表为:(在某些终端上,“bold”表示“light”)。这几乎与 irssi 使用的转换表相同。

             text      text            background
 ------------------------------------------------
 %k %K %0    black     dark grey       black
 %r %R %1    red       bold red        red
 %g %G %2    green     bold green      green
 %y %Y %3    yellow    bold yellow     yellow
 %b %B %4    blue      bold blue       blue
 %m %M %5    magenta   bold magenta    magenta
 %p %P       magenta (think: purple)
 %c %C %6    cyan      bold cyan       cyan
 %w %W %7    white     bold white      white

 %F     Blinking, Flashing
 %U     Underline
 %8     Reverse
 %_,%9  Bold

 %n     Resets the color
 %%     A single %

第一个参数是要转换的字符串,第二个参数是一个可选标志,指示是否应使用颜色。默认为 true,如果设置为 false,则颜色代码将被删除(并且 %% 将转换为 %)

public static string renderColoredString ( $string, $colored true )
$string 字符串

要转换的字符串

$colored 布尔值

字符串是否应着色?

                public static function renderColoredString($string, $colored = true)
{
    // TODO rework/refactor according to https://github.com/yiisoft/yii2/issues/746
    static $conversions = [
        '%y' => [self::FG_YELLOW],
        '%g' => [self::FG_GREEN],
        '%b' => [self::FG_BLUE],
        '%r' => [self::FG_RED],
        '%p' => [self::FG_PURPLE],
        '%m' => [self::FG_PURPLE],
        '%c' => [self::FG_CYAN],
        '%w' => [self::FG_GREY],
        '%k' => [self::FG_BLACK],
        '%n' => [0], // reset
        '%Y' => [self::FG_YELLOW, self::BOLD],
        '%G' => [self::FG_GREEN, self::BOLD],
        '%B' => [self::FG_BLUE, self::BOLD],
        '%R' => [self::FG_RED, self::BOLD],
        '%P' => [self::FG_PURPLE, self::BOLD],
        '%M' => [self::FG_PURPLE, self::BOLD],
        '%C' => [self::FG_CYAN, self::BOLD],
        '%W' => [self::FG_GREY, self::BOLD],
        '%K' => [self::FG_BLACK, self::BOLD],
        '%N' => [0, self::BOLD],
        '%3' => [self::BG_YELLOW],
        '%2' => [self::BG_GREEN],
        '%4' => [self::BG_BLUE],
        '%1' => [self::BG_RED],
        '%5' => [self::BG_PURPLE],
        '%6' => [self::BG_CYAN],
        '%7' => [self::BG_GREY],
        '%0' => [self::BG_BLACK],
        '%F' => [self::BLINK],
        '%U' => [self::UNDERLINE],
        '%8' => [self::NEGATIVE],
        '%9' => [self::BOLD],
        '%_' => [self::BOLD],
    ];
    if ($colored) {
        $string = str_replace('%%', '% ', $string);
        foreach ($conversions as $key => $value) {
            $string = str_replace(
                $key,
                static::ansiFormatCode($value),
                $string
            );
        }
        $string = str_replace('% ', '%', $string);
    } else {
        $string = preg_replace('/%((%)|.)/', '$2', $string);
    }
    return $string;
}

            
restoreCursorPosition() 公共静态方法

定义于: yii\helpers\BaseConsole::restoreCursorPosition()

通过向终端发送 ANSI 控制代码 RCP 恢复使用 saveCursorPosition() 保存的光标位置。

public static void restoreCursorPosition ( )

                public static function restoreCursorPosition()
{
    echo "\033[u";
}

            
saveCursorPosition() 公共静态方法

定义于: yii\helpers\BaseConsole::saveCursorPosition()

通过向终端发送 ANSI 控制代码 SCP 保存当前光标位置。

然后可以使用 restoreCursorPosition() 恢复位置。

public static void saveCursorPosition ( )

                public static function saveCursorPosition()
{
    echo "\033[s";
}

            
scrollDown() 公共静态方法

定义于: yii\helpers\BaseConsole::scrollDown()

通过向终端发送 ANSI 控制代码 SD 向下滚动整页。

在顶部添加新行。Windows 中使用的 ANSI.SYS 不支持此功能。

public static void scrollDown ( $lines 1 )
$lines 整数

向下滚动的行数

                public static function scrollDown($lines = 1)
{
    echo "\033[" . (int) $lines . 'T';
}

            
scrollUp() 公共静态方法

定义于: yii\helpers\BaseConsole::scrollUp()

通过向终端发送 ANSI 控制代码 SU 向上滚动整页。

在底部添加新行。Windows 中使用的 ANSI.SYS 不支持此功能。

public static void scrollUp ( $lines 1 )
$lines 整数

向上滚动的行数

                public static function scrollUp($lines = 1)
{
    echo "\033[" . (int) $lines . 'S';
}

            
select() 公共静态方法

定义于: yii\helpers\BaseConsole::select()

让用户选择一个选项。输入“?”将显示要选择的选项列表及其说明。

public static string select ( $prompt, $options = [], $default null )
$prompt 字符串

提示信息

$options 数组

要从中选择的选项的键值对数组。键是输入和使用的内容,值是通过 help 命令显示给最终用户的。

$default 字符串|

用户未提供选项时使用的值。如果默认值为 null,则要求用户选择一个选项。

返回 字符串

用户选择的选项字符

版本 描述
2.0.49 添加了 $default 参数

                public static function select($prompt, $options = [], $default = null)
{
    top:
    static::stdout("$prompt (" . implode(',', array_keys($options)) . ',?)'
        . ($default !== null ? '[' . $default . ']' : '') . ': ');
    $input = static::stdin();
    if ($input === '?') {
        foreach ($options as $key => $value) {
            static::output(" $key - $value");
        }
        static::output(' ? - Show help');
        goto top;
    } elseif ($default !== null && $input === '') {
        return $default;
    } elseif (!array_key_exists($input, $options)) {
        goto top;
    }
    return $input;
}

            
showCursor() 公共静态方法

定义于: yii\helpers\BaseConsole::showCursor()

当光标已由 hideCursor() 隐藏时,将再次显示光标,通过向终端发送 ANSI DECTCEM 代码 ?25h。

public static void showCursor ( )

                public static function showCursor()
{
    echo "\033[?25h";
}

            
startProgress() 公共静态方法

定义于: yii\helpers\BaseConsole::startProgress()

在屏幕上开始显示进度条。

此进度条将由 updateProgress() 更新,并可能由 endProgress() 结束。

以下示例展示了进度条的简单用法

Console::startProgress(0, 1000);
for ($n = 1; $n <= 1000; $n++) {
    usleep(1000);
    Console::updateProgress($n, 1000);
}
Console::endProgress();

类似 Git clone 的进度(仅显示状态信息)

Console::startProgress(0, 1000, 'Counting objects: ', false);
for ($n = 1; $n <= 1000; $n++) {
    usleep(1000);
    Console::updateProgress($n, 1000);
}
Console::endProgress("done." . PHP_EOL);

另请参阅

public static void startProgress ( $done, $total, $prefix '', $width null )
$done 整数

已完成的项目数量。

$total 整数

要完成的项目总数。

$prefix 字符串

一个可选的字符串,在进度条之前显示。默认为空字符串,这意味着不显示前缀。

$width integer|float|boolean|null

进度条的可选宽度。这可以是一个整数,表示进度条要显示的字符数,也可以是一个 0 到 1 之间的浮点数,表示进度条可能占用的屏幕百分比。它也可以设置为 false 以禁用进度条,并且仅显示进度信息,如百分比、项目数量和预计时间。如果未设置,则进度条将与屏幕一样宽。屏幕大小将使用 getScreenSize() 检测。

                public static function startProgress($done, $total, $prefix = '', $width = null)
{
    self::$_progressStart = time();
    self::$_progressWidth = $width;
    self::$_progressPrefix = $prefix;
    self::$_progressEta = null;
    self::$_progressEtaLastDone = 0;
    self::$_progressEtaLastUpdate = time();
    static::updateProgress($done, $total);
}

            
stderr() 公共静态方法

定义于: yii\helpers\BaseConsole::stderr()

将字符串打印到 STDERR。

public static integer|boolean stderr ( $string )
$string 字符串

要打印的字符串

返回 整数|布尔值

打印的字节数或错误时的 false

                public static function stderr($string)
{
    return fwrite(\STDERR, $string);
}

            
stdin() 公共静态方法

定义于: yii\helpers\BaseConsole::stdin()

从 STDIN 获取输入并返回一个针对 EOLs 右修剪的字符串。

public static string stdin ( $raw false )
$raw 布尔值

如果设置为 true,则返回未修剪的原始字符串

返回 字符串

从 stdin 读取的字符串

                public static function stdin($raw = false)
{
    return $raw ? fgets(\STDIN) : rtrim(fgets(\STDIN), PHP_EOL);
}

            
stdout() 公共静态方法

定义于: yii\helpers\BaseConsole::stdout()

将字符串打印到 STDOUT。

public static integer|boolean stdout ( $string )
$string 字符串

要打印的字符串

返回 整数|布尔值

打印的字节数或错误时的 false

                public static function stdout($string)
{
    return fwrite(\STDOUT, $string);
}

            
streamSupportsAnsiColors() 公共静态方法

定义于: yii\helpers\BaseConsole::streamSupportsAnsiColors()

如果流支持着色,则返回 true。如果流不支持,则禁用 ANSI 颜色。

  • 没有 ansicon 的 Windows
  • 非 tty 控制台
public static boolean streamSupportsAnsiColors ( $stream )
$stream 混合类型
返回 布尔值

如果流支持 ANSI 颜色,则为 true,否则为 false。

                public static function streamSupportsAnsiColors($stream)
{
    return DIRECTORY_SEPARATOR === '\\'
        ? getenv('ANSICON') !== false || getenv('ConEmuANSI') === 'ON'
        : function_exists('posix_isatty') && @posix_isatty($stream);
}

            
stripAnsiFormat() 公共静态方法

定义于: yii\helpers\BaseConsole::stripAnsiFormat()

从字符串中删除 ANSI 控制代码。

public static 字符串 stripAnsiFormat ( $string )
$string 字符串

要去除的字符串

                public static function stripAnsiFormat($string)
{
    return preg_replace(self::ansiCodesPattern(), '', (string)$string);
}

            
updateProgress() 公共静态方法

定义于: yii\helpers\BaseConsole::updateProgress()

更新由 startProgress() 启动的进度条。

另请参阅

public static void updateProgress ( $done, $total, $prefix null )
$done 整数

已完成的项目数量。

$total 整数

要完成的项目总数。

$prefix 字符串|

一个可选的字符串,显示在进度条之前。默认为 null,表示将使用 startProgress() 指定的前缀。如果指定了前缀,它将更新后续调用中将使用的前缀。

                public static function updateProgress($done, $total, $prefix = null)
{
    if ($prefix === null) {
        $prefix = self::$_progressPrefix;
    } else {
        self::$_progressPrefix = $prefix;
    }
    $width = static::getProgressbarWidth($prefix);
    $percent = ($total == 0) ? 1 : $done / $total;
    $info = sprintf('%d%% (%d/%d)', $percent * 100, $done, $total);
    self::setETA($done, $total);
    $info .= self::$_progressEta === null ? ' ETA: n/a' : sprintf(' ETA: %d sec.', self::$_progressEta);
    // Number extra characters outputted. These are opening [, closing ], and space before info
    // Since Windows uses \r\n\ for line endings, there's one more in the case
    $extraChars = static::isRunningOnWindows() ? 4 : 3;
    $width -= $extraChars + static::ansiStrlen($info);
    // skipping progress bar on very small display or if forced to skip
    if ($width < 5) {
        static::stdout("\r$prefix$info   ");
    } else {
        if ($percent < 0) {
            $percent = 0;
        } elseif ($percent > 1) {
            $percent = 1;
        }
        $bar = floor($percent * $width);
        $status = str_repeat('=', $bar);
        if ($bar < $width) {
            $status .= '>';
            $status .= str_repeat(' ', $width - $bar - 1);
        }
        static::stdout("\r$prefix" . "[$status] $info");
    }
    flush();
}

            
wrapText() 公共静态方法 (自版本 2.0.4 起可用)

定义于: yii\helpers\BaseConsole::wrapText()

使用缩进换行文本以适应屏幕尺寸。

如果无法检测到屏幕大小,或者缩进大于屏幕大小,则文本将不会换行。

第一行**不会**缩进,因此,如果屏幕宽度为 16 个字符,则Console::wrapText("Lorem ipsum dolor sit amet.", 4) 将产生以下输出

Lorem ipsum
    dolor sit
    amet.
public static 字符串 wrapText ( $text, $indent 0, $refresh false )
$text 字符串

要换行的文本

$indent 整数

用于缩进的空格数。

$refresh 布尔值

是否强制刷新屏幕大小。这将传递给 getScreenSize()

返回 字符串

换行后的文本。

                public static function wrapText($text, $indent = 0, $refresh = false)
{
    $size = static::getScreenSize($refresh);
    if ($size === false || $size[0] <= $indent) {
        return $text;
    }
    $pad = str_repeat(' ', $indent);
    $lines = explode("\n", wordwrap($text, $size[0] - $indent, "\n"));
    $first = true;
    foreach ($lines as $i => $line) {
        if ($first) {
            $first = false;
            continue;
        }
        $lines[$i] = $pad . $line;
    }
    return implode("\n", $lines);
}

            
xtermBgColor() 公共静态方法

定义于: yii\helpers\BaseConsole::xtermBgColor()

返回 xterm 背景颜色的 ansi 格式代码。

您可以将此方法的返回值传递给以下格式化方法之一: ansiFormat()ansiFormatCode()beginAnsiFormat()

另请参见 https://en.wikipedia.org/wiki/Talk:ANSI_escape_code#xterm-256colors

public static 字符串 xtermBgColor ( $colorCode )
$colorCode 整数

Xterm 颜色代码

                public static function xtermBgColor($colorCode)
{
    return '48;5;' . $colorCode;
}

            
xtermFgColor() 公共静态方法

定义于: yii\helpers\BaseConsole::xtermFgColor()

返回 xterm 前景色颜色的 ansi 格式代码。

您可以将此方法的返回值传递给以下格式化方法之一: ansiFormat()ansiFormatCode()beginAnsiFormat()

另请参见 https://en.wikipedia.org/wiki/Talk:ANSI_escape_code#xterm-256colors

public static 字符串 xtermFgColor ( $colorCode )
$colorCode 整数

Xterm 颜色代码

                public static function xtermFgColor($colorCode)
{
    return '38;5;' . $colorCode;
}