shalvah / clara
🔊 CLI应用程序的简单、美观、可测试的控制台输出。
Requires
- php: >=7.4
- symfony/console: ^4.0|^5.0|^6.0|^7.0
Requires (Dev)
- eloquent/phony-phpunit: ^7.0
- phpunit/phpunit: ^9.1
README
CLI应用程序的简单、美观、可测试的控制台输出。(在Scribe中使用。)
特性
- 颜色和emoji来区分日志类型
- 两种不同的输出模式,根据您需要的颜色程度选择
- 自动隐藏/显示调试输出
- 可以捕获控制台输出以方便测试——无需模拟
- 可定制颜色方案
图标模式
标签模式
安装
(PHP 7.4+)
composer require shalvah/clara
使用Clara
$output = clara('myappname'); $output->info("Installing package"); $output->debug("Attempt 3 of 5"); $output->warn("The file does not exist."); $output->error("Something went wrong!"); $output->success("Done. Go and be awesome.");
选择模式
默认情况下,Clara使用"图标"模式——输出根据输出类型着色,并添加emoji(如上第一张截图所示)。如果您愿意,可以切换到"标签"模式
$output = clara('myappname', \Shalvah\Clara\Clara::MODE_LABELS); // The default $output = clara('myappname', \Shalvah\Clara\Clara::MODE_ICONS);
在标签模式中(上第二张截图所示),emoji仍然存在,但输出类型被写出,主要输出消息不着色。
禁用颜色和emoji
如果您希望输出一行文本而没有上面函数提供的额外格式,可以使用->line()
方法。
自定义颜色方案
您还可以通过传递包含您首选颜色的数组作为第三个参数来自定义Clara为每种类型使用的颜色
$output = clara('myappname', \Shalvah\Clara\Clara::MODE_ICONS, [ 'info' => 'blue', ]);
有关支持的颜色详细信息,请参阅Symfony文档。
切换调试输出
在CLI应用程序中包含一个详细标志(--verbose
),允许您向用户显示更多(调试)输出是一种常见做法。使用Clara,您可以轻松启用或禁用调试日志
$isVerbose = $this->getFlag('verbose'); // If $isVerbose is true, // Clara won't print or capture any debug logs $app1 = clara('app1')->showDebugOutput($isVerbose); $app1->debug("App 1 - Output 1"); // You can also toggle debug output manually $app1->hideDebugOutput(); $app1->debug("App 1 - Output 2"); $app1->showDebugOutput(); $app1->debug("App 1 - Output 3");
请注意,默认情况下,Clara将显示所有输出。
静音输出
有时在运行应用程序的测试时,您不希望控制台被输出消息弄乱。您可以使用mute()
和unmute
静态方法关闭Clara的输出。要静音或取消静音特定应用程序,请传入应用程序名称。
$output1 = clara('myapp1'); $output2 = clara('myapp2'); // Mute only output from "myapp1" Clara::mute('myapp1'); // Won't be printed. $output1->info("Installing package"); // Will be printed $output2->info("Installing package"); Clara::mute(); // Mute all apps Clara::unmute("myapp1"); // Unmute myapp1 Clara::unmute(); // Unmute all apps
仅显示应用程序的输出。
假设您的应用程序包含另一个使用Clara的应用程序。默认情况下,所有应用程序的输出都会显示。您可以通过调用->only()
关闭除了您的应用程序之外的所有应用程序的输出。
// SHow only output from mymainapp $output1 = clara('mymainapp')->only(); // This is equivalent to doing: Clara::mute(); Clara::unmute('yourappname');
捕获输出
有时您需要断言应用程序打印了您期望的内容。一种简单的方法是使用输出捕获。
Clara::startCapturingOutput('myapp1'); // Clara will start capturing output from myapp1 $output1 = clara('myapp1'); $output1->warn("Going to fail"); $output1->error("Failed"); $capturedOutput = Clara::getCapturedOutput('myapp1'); // $capturedOutput = [ // "⚠ <fg=yellow>Going to fail</>", // "✖ <fg=red>Failed</>", // ] Clara::stopCapturingOutput('myapp1'); Clara::clearCapturedOutput('myapp1'); // Will empty saved output
您可以通过调用Clara::reset()
将Clara的整个状态重置为默认值。这将清除捕获的输出,停止捕获所有应用程序,并取消静音所有应用程序。
设置输出通道
默认情况下,Clara输出到控制台,但实际上您可以将输出到其他地方。如果您正在编写Laravel Artisan命令并希望使用Clara进行输出同时通过Artisan的->output()
方法捕获输出,这很有用。您只需调用useOutput
并传入一个Symfony\Component\Console\Output\OutputInterface
实例(对于Artisan类,它是$this->output
)即可。
$this->clara = clara('myapp' ->showDebugOutput($this->option('verbose')) ->useOutput($this->output) ->only();