控制台组件:CLI 命令
使用 Symfony Console Command 类构建交互式 CLI 工具。
控制台组件:CLI 命令 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
什么是 Symfony Console 组件?
Symfony Console 让您可以在 PHP 中构建结构化且易于测试的 CLI 应用程序,并支持选项、参数、进度条和彩色输出。
安装
安装该组件。
$ composer require symfony/console创建命令
继承 Command,并重写 configure() 和 execute()。
<?php
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
class GreetCommand extends Command
{
protected static string $defaultName = "app:greet";
protected function configure(): void
{
$this->setDescription("Greet a user")
->addArgument("name", \InputArgument::REQUIRED, "Name to greet")
->addOption("uppercase", "u", \InputOption::VALUE_NONE, "Uppercase output");
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$name = $input->getArgument("name");
if ($input->getOption("uppercase")) $name = strtoupper($name);
$output->writeln("Hello, $name!");
return Command::SUCCESS;
}
}设置应用程序
在 Application 中注册命令并运行应用程序。
<?php
use Symfony\Component\Console\Application;
$app = new Application("MyApp", "1.0.0");
$app->add(new GreetCommand());
$app->run();参数和选项
参数按位置传入(必需或可选)。选项是命名标志(--name=value 或 -n value)。
<?php
$this->addArgument("file", InputArgument::REQUIRED)
->addArgument("output", InputArgument::OPTIONAL, "Output file", "out.txt")
->addOption("verbose", "v", InputOption::VALUE_NONE, "Verbose output")
->addOption("format", "f", InputOption::VALUE_REQUIRED, "Output format", "json");输出辅助工具
使用辅助方法格式化输出。
<?php
$output->writeln("<info>Success!</info>");
$output->writeln("<error>Error occurred</error>");
$output->writeln("<comment>Processing...</comment>");ProgressBar
为长时间运行的任务显示进度条。
<?php
use Symfony\Component\Console\Helper\ProgressBar;
$bar = new ProgressBar($output, count($items));
$bar->start();
foreach ($items as $item) {
processItem($item);
$bar->advance();
}
$bar->finish();表格辅助工具
在终端中显示表格数据。
<?php
use Symfony\Component\Console\Helper\Table;
$table = new Table($output);
$table->setHeaders(["ID", "Name", "Email"])
->setRows($userData)
->render();问题辅助工具
以交互方式提示用户输入。
<?php
use Symfony\Component\Console\Question\Question;
$helper = $this->getHelper("question");
$question = new Question("Enter database password: ");
$question->setHidden(true);
$password = $helper->ask($input, $output, $question);返回码
从 execute() 返回 Command::SUCCESS(0)、Command::FAILURE(1)或 Command::INVALID(2)。CI 系统会使用这些代码。
在 Laravel 中
Laravel Artisan 命令继承 Illuminate\Console\Command,并使用 $signature 和 $description 属性,而不是使用 configure()。
总结
通过继承 Command 创建命令。在 configure() 中定义参数和选项。在 execute() 中执行逻辑。使用辅助工具处理进度条、表格和用户提示。
快速检查
成功的命令应从 execute() 返回哪个整数?
常见问题解答
「控制台组件:CLI 命令」课时是免费的吗?
是的 — 「控制台组件:CLI 命令」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「控制台组件:CLI 命令」这节课中我会学到什么?
使用 Symfony Console Command 类构建交互式 CLI 工具。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「控制台组件:CLI 命令」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。