php-pmd/console

PHP 命令行控制台(clio/clio)

0.0.1 2021-01-12 10:51 UTC

This package is auto-updated.

Last update: 2024-09-28 14:24:53 UTC


README

基于 Clio 的控制台。

控制台是一个轻量级工具和辅助类,用于 CLI 应用程序。

它提供彩色输出、提示、确认输入、选择、背景。

安装

composer require php-pmd/console

需要 PHP 5.4。此库在 POSIX 系统上开发,并打算在已加载 posix、pcntl 和 sockets 扩展的 POSIX 系统上使用。

Console 类提供交互式命令行输入/输出辅助工具。

Console::stdin($raw = false)

等待用户输入。如果 $raw 设置为 true,则返回不带右修剪的 PHP_EOL 的输入。

Console::input($prompt = null, $raw = false)

询问用户输入,当用户输入 PHP_EOL 字符时结束。您可以提供提示字符串。如果 $raw 设置为 true,则返回不带右修剪的 PHP_EOL 的输入。

Console::stdout($text, $raw = false)

$text 打印到 STDOUT。文本可以包含文本颜色和样式指定符。此方法通过使用 shell 重定向检测文本是否要发送到 TTY 或通过文件发送,并根据情况相应地处理,在后者的情况下,通过删除所有颜色和样式指定符来处理文本。

如果第二个参数设置为 true,则将按原样打印 $text,保留所有文本颜色和样式指定符,无论是否打印到 TTY 或文件。

<?php
use PhpPmd\Console;
Console::stdout('Hello, World!');

Console::output($text, $raw = false)

Console::stdout 相同,但它自动附加一个 PHP_EOL

Console::stderr($text, $raw = false)

行为类似于 Console::stdout,但用于 STDERR。

Console::error($text, $raw = false)

Console::stderr 相同,但自动附加一个 PHP_EOL

Console::prompt($text, $options)

此函数提示用户输入。有几个选项可用

  • required: 如果输入是必需的则为 true,否则为 false。
  • default: 如果用户没有提供输入,则此为默认值。
  • pattern: 用于匹配的正则表达式模式。
  • validator: 验证输入的可调用函数。必须返回 truefalse
  • error: 默认错误消息。

如果发生输入错误,则提示会重复,并会持续询问用户输入,直到满足 $options 数组中的所有要求。请注意,如果您提供默认选项,则不会强制执行 required

<?php
use PhpPmd\Console;
$db_host = Console::prompt('database host', ['default' => 'localhost']);

如果您提供自己的验证可调用函数,可以向第二个参数传递自定义错误消息。

<?php
use PhpPmd\Console;
$file = Console::prompt('File', [
    'required' => true,
    'validator' => function($input, &$error = null) {
        if (is_readable($input)) {
            return true;
        } else {
            $error = 'Path given is not a readable file';
            return false;
        }
    }
]);

请注意,为此功能正常工作,第二个参数必须声明为引用。

Console::confirm($text)

询问用户简单的 y/n 回答。答案可以是 'y''n''Y''N'。返回 truefalse

<?php
use PhpPmd\Console;
$sure = Console::confirm('are you sure?');

Console::select($text, $options)

询问用户从选项中选择。$options 数组是输入和说明的键值对。自动附加输入选项 '?',它作为帮助选项显示所有其他选项及其相应的说明。

<?php
use PhpPmd\Console;
$opt = Console::select('apply this patch?',
    ['y' => 'yes', 'n' => 'no', 'a' => 'all']
);

Console::work(callable $callable)

通过创建另一个进程来在后台运行$callable,同时将状态更新显示到标准输出。默认情况下,状态更新是一个简单的旋转器,一旦$callable返回,旋转器将停止。通过向$callable提供一个$socket参数,状态更新将由后台进程发送到前台进程,使用socket_write()函数实现。

<?php
use PhpPmd\Console;
Console::stdout('Working ... ');
Console::work(function($socket) { // $socket is optional, defaults to a spinner
    $n = 100;
    for ($i = 1; $i <= $n; $i++) {
        // do whatever it is you need to do
        socket_write($socket, "[$i/$n]\n");
        sleep(1); // sleep is good for you
    }
});
Console::stdout("%g[DONE]%n\n");

发送到前台进程的消息需要以一个"\n"字符结束。

文本颜色和样式指定符

您可以使用格式为%x的文本颜色和样式指定符,其中x是指定符。

<?php
use PhpPmd\Console;
Console::output('this is %rcolored%n and %Bstyled%n');

使用%n指定符可以将文本的颜色和样式规范化为shell的默认值。这个指定符来自PEAR的Console_Color包。要打印百分号,只需放置两个%字符即可。以下是完整的指定符集:

            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 %

您可以将这些指定符与接受字符串并输出的方法一起使用。