0Pricing
PHP Academy · 课时

控制台组件: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 反馈 — 无需本地设置。

此课程中的所有课时

  1. HttpFoundation:请求与响应
  2. DependencyInjection 容器
  3. EventDispatcher:解耦事件
  4. 控制台组件:CLI 命令
← 返回 PHP Academy