Minicli 是一个极简、无依赖的框架,用于构建以 CLI 为中心的 PHP 应用程序。它提供了一种结构化的方式来组织命令,以及各种帮助程序,以方便使用命令参数、获取用户的输入以及打印彩色输出。
快速链接:
无依赖性意味着什么?这意味着您可以构建一个工作的 CLI PHP 应用程序,而无需数十个嵌套的用户级依赖项。基本的minicli/minicli
包仅具有测试依赖项和单个系统要求:
注意:如果您想获取用户输入,则还需要
readline
PHP 扩展。
它为您提供了很大的空间来选择自己的依赖项。
有两种方法可以开始。如果您想要最低限度(我们称之为“极简应用程序”),您可以使用整个应用程序创建单个 PHP 脚本。如果您想要一个包含命令和子命令的更加结构化的应用程序,那么您应该使用命令命名空间将命令组织到控制器中。
如果您只想设置一些简单的命令来通过minicli
运行,您所需要做的就是创建一个App
并将您的命令注册为匿名函数。
composer require minicli/minicli
- 这将生成一个新的composer.json
文件。minicli
脚本: #!/usr/bin/env php
<?php
if ( php_sapi_name () !== ' cli ' ) {
exit ;
}
require __DIR__ . ' /vendor/autoload.php ' ;
use Minicli App ;
use Minicli Command CommandCall ;
$ app = new App ();
$ app -> setSignature ( ' ./minicli mycommand ' );
$ app -> registerCommand ( ' mycommand ' , function ( CommandCall $ input ) {
echo " My Command! " ;
var_dump ( $ input );
});
$ app -> runCommand ( $ argv );
然后,使其可执行并使用命令运行minicli
:
chmod +x minicli
./minicli mycommand
对于使用控制器和服务的更加结构化的应用程序,最好使用命令命名空间。我们的应用程序模板存储库是以这种方式设置 Minicli 的一个很好的起点/模板。
要使用minicli/application
模板创建新项目,请运行:
composer create-project --prefer-dist minicli/application myapp
这将生成如下目录结构:
.
app
└── Command
└── Help
├── DefaultController.php
├── TableController.php
└── TestController.php
├── composer.json
├── docs
├── LICENSE
├── minicli
├── mkdocs.yml
└── README.md
app/Command
中的每个目录都代表一个命令命名空间。 app/Command/Help
中的类代表您可以通过主help
命令访问的子命令。
您现在可以使用以下命令运行引导应用程序:
./minicli help
该文档包含有关创建命令和使用输出的更多详细信息。
Minicli 支持使用颜色主题来更改命令行输出的样式。除默认主题外,目前还有 3 个内置主题:
要设置主题,请在脚本中初始化 App 时传入一个带有theme
值的配置数组。内置主题需要一个前导字符:
$ app = new App ([
' theme ' => ' Unicorn '
]);
要使用默认的内置主题,请不要包含主题配置设置,或将其设置为空字符串。
还可以在您的项目中创建和定义用户定义的主题。在这种情况下,设置主题名称,包括其名称空间,不带前导 :
$ app = new App ([
' theme ' => ' AppThemeBlueTheme '
]);
上述设置将使用以下示例主题:
<?php
// File : app / Theme / BlueTheme . php
namespace App Theme ;
use Minicli Output Theme DefaultTheme ;
use Minicli Output CLIColors ;
class BlueTheme extends DefaultTheme
{
public function getThemeColors (): array
{
return [
' default ' => [ CLIColors:: $ FG_BLUE ],
' alt ' => [ CLIColors:: $ FG_BLACK , CLIColors:: $ BG_BLUE ],
' info ' => [ CLIColors:: $ FG_WHITE ],
' info_alt ' => [ CLIColors:: $ FG_WHITE , CLIColors:: $ BG_BLUE ]
];
}
}
用户定义的主题只需定义样式即可覆盖默认主题中的样式。
非常欢迎您的贡献!您可以贡献代码、文档、归档问题...请参阅我们的贡献文档,了解有关贡献流程以及我们对您的期望的更多信息。
Minicli 使用 Pest PHP 作为测试框架。通过composer install
安装了所有依赖项后,您可以使用以下命令运行测试套件:
./vendor/bin/pest
要获取代码覆盖率报告,您需要安装xdebug
。然后,您可以运行:
./vendor/bin/pest --coverage
这将为您提供有关代码覆盖率的详细信息。
以下关于 dev.to 的教程组成了一个名为“构建 Minicli”的系列,其中我们从头开始创建minicli
:
注意:自该系列最初编写以来,Minicli 已经发生了很大的变化,但那是今天 Minicli 的基础。