# 通过 CLI 运行控制器

除了通过浏览器中的 URL 调用应用程序的 控制器 外，还可以通过命令行接口 (CLI) 来加载它们。

备注

建议为 CLI 脚本使用 Spark 命令，而不是通过 CLI 调用控制器。 有关详细信息，请参阅 Spark 命令 和 创建 Spark 命令 页面。

## 动手试试：Hello World!

### 创建控制器

让我们创建一个简单的控制器，以便你直观地看到它的运行效果。使用你的文本编辑器，创建一个名为 Tools.php 的文件，并将以下代码放入其中：

    <?php

    namespace App\Controllers;

    use CodeIgniter\Controller;

    class Tools extends Controller
    {
        public function message($to = 'World')
        {
            return "Hello {$to}!" . PHP_EOL;
        }
    }

备注

如果你使用 自动路由（改进版），请将方法名改为 `cliMessage()`。

然后将文件保存到你的 app/Controllers/ 目录中。

### 定义路由

如果使用自动路由，则可以跳过此步骤。

在你的 app/Config/Routes.php 文件中，可以像创建其他任何路由一样轻松地创建仅可通过 CLI 访问的路由。你不需要使用 `get()`、`post()` 或类似的方法，而是使用 `cli()` 方法。其他所有内容的工作方式都与普通路由定义完全相同：

    <?php

    $routes->cli('tools/message/(:segment)', 'Tools::message/$1');

有关更多信息，请参阅 路由 页面。

警告

如果你启用了 自动路由（传统版） 并将命令文件放在 app/Controllers 目录中， 任何人都可以通过 HTTP 并借助 自动路由（传统版） 访问该命令。

### 通过 CLI 运行

通常，你会使用类似这样的 URL 访问你的网站:

    example.com/index.php/tools/message/to

相反，我们将在 Mac/Linux 上打开终端，或在 Windows 上打开“运行” > “cmd”， 在 Windows 中导航到你的 CodeIgniter 项目的 Web 根目录。

    $ cd /path/to/project/public
    $ php index.php tools message

如果操作正确，你应该会看到打印出的 "Hello World!"。

    $ php index.php tools message "John Smith"

这里我们以与 URL 参数相同的方式传递了一个参数。"John Smith" 作为参数被传递，输出结果为:

    Hello John Smith!

## 基础知识就这些！

总而言之，关于命令行上的控制器，你需要了解的就这些。请记住，这只是一个普通的控制器，因此路由和 `_remap()` 方法都能正常工作。

备注

`_remap()` 与 自动路由（改进版） 不兼容。

如果要确认是否通过 CLI 运行，可以检查 `is_cli()` 的返回值。

然而，CodeIgniter 提供了额外的工具，使创建可通过 CLI 访问的脚本变得更加便捷，包括仅限 CLI 的路由，以及一个帮助你处理仅限 CLI 工具的库。