martijnvdb/php-cli

PHP的命令行界面库

0.3.0 2021-06-12 19:01 UTC

This package is auto-updated.

Last update: 2024-09-13 02:08:26 UTC


README

这个库可以帮助你快速创建CLI应用程序。

安装

您可以通过composer安装此包

composer require martijnvdb/php-cli

使用

将composer自动加载器添加到您的应用程序中,并创建CLI类的新实例。要运行应用程序,请使用run()方法。此示例将放置在名为myapp的文件中(没有.php扩展名)。

require __DIR__ . '/vendor/autoload.php';

use Martijnvdb\PhpCli\Cli;

$cli = (new Cli('First CLI App', '0.1.0'))->run();

要向应用程序添加默认命令,请使用add()方法。将回调函数作为第一个参数使用。此回调函数将不带任何额外参数被调用。要执行脚本,请运行php myapp

$cli = new Cli('First CLI App', '0.1.0');

$cli->add(function ($input, $output) {
        // ...
})
->run();

add()方法还可以用于向您的应用程序注册命令。此示例将在运行php myapp helloworld时执行。

$cli = new Cli('First CLI App', '0.1.0');

$cli->add('helloworld', function ($input, $output) {
        // ...
})
->run();

使用$options变量

$options对象将包含所有命令行参数。您可以使用all()get()方法检索值。在运行php myapp helloworld --message "Hello, World!"'时,示例将返回以下内容。

$cli->add('helloworld', function ($options, $output) {
    // This will return all options
    $options = $options->all();
    
    // This will return the value of the '--message' option
    $message = $options->get('--message'); 
    
    // Will return the value of the '--message' or '-m' option
    $message = $options->get('--message', '-m');
 
    // $options = ["--message" => "Hello, World!"];
    // $message = "Hello, World!";
})

使用$output变量

$output对象可以帮助您格式化输出。

BB代码

此库支持自定义版本的BB代码,以帮助您样式化输出。只要标签以开标签和闭标签开始,您就可以混合匹配任何标签。

$output->line('[bold]Bold Text[/bold]');
$output->line('[red]Red Text[/red]');
$output->line('[bg:green]Green Background[/bg:green]');
$output->line('[bg:white][magenta][italic]Italic magenta text on a white background[/italic][/magenta][/bg:white]');
样式

这些将更改文本样式。

[bold][b][dim][italic][i][underline][u][blink][inverse][reverse][invisible][strikethrough][s]

文本颜色

这些将更改文本颜色。

[black][red][green][yellow][blue][magenta][cyan][white]

背景颜色

这些将更改文本的背景颜色。

[bg:black][bg:red][bg:green][bg:yellow][bg:blue][bg:magenta][bg:cyan][bg:white]

$output方法

$output对象包含以下方法

基本文本

四个基本文本输出方法。它们之间的唯一区别在于它们处理换行的方式。

$output->echo(string $value = '');
$output->line(string $value = '');
$output->lines(array $lines = []);
$output->paragraph(string $value = '');

版本

输出应用程序的当前版本。

$output->version();

输出格式化的列。变量$rows是一个包含数组的数组,其中每个条目是一个单元格。变量$column_styles允许您使用相同的样式来格式化整个列。您应使用不带括号的BB代码来执行此操作。

$output->columns(string $label, array $rows = [], array $column_styles = []);

查看examples/generate以了解如何使用这些方法的示例。

输入辅助类

此库还包含一个辅助类,允许应用程序轻松获取用户的特定输入。

$input = Input::text(string $label)->get();
$input = Input::number(string $label)->get();
$input = Input::url(string $label)->get();
$input = Input::email(string $label)->get();
$input = Input::choice(string $label, array $options)->get();

选择输入辅助类的示例

$input = Input::choice('[yellow]Select an option[/yellow] [green](1/2/3)[/green]:', [
        '1' => 'Option 1',
        '2' => 'Option 2',
        '3' => 'Option 3'
    ])
    ->required()
    ->setDefault('1')
    ->get();

输入方法

强制用户输入

如果提供的输入为空,则将显示一个必填消息。

$input->required(string $message);

设置默认值

如果用户没有提供输入,则返回提供的默认值。

$input->setDefault($default);

设置无效消息

当用户输入无效输入时将显示的消息。

$input->setInvalidMessage(string $message);

设置输入样式

$options 数组可以填充不带括号的 BB 代码标签(例如:['red', 'bold'])。

$input->inputStyling($options = []);

进度辅助类

Progress 类在控制台显示进度条。使用介于 01 之间的浮点数作为 set() 方法的参数,可以设置进度条的当前百分比。进度条还会显示运行时间和预计剩余时间(ETA)。start() 方法将启动这些值的计时器。 stop() 方法将停止计时器和进度条。

$progress = Progress::new();
$progress->start();
$progress->set(0.25);
$progress->set(0.5);
$progress->set(0.75);
$progress->set(1);
$progress->stop();

进度自定义

您可以使用 size()foreground()background() 方法来自定义进度条的外观。

// Default size
$progress->size(30);

// Default templates
$progress->foreground('[bg:white][invisible]|[/invisible][/bg:white]');
$progress->background('[bg:240][invisible].[/invisible][/bg:240]');