通过 CLI 运行控制器

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

注意

建议使用 Spark 命令来创建 CLI 脚本,而不是通过 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”,然后导航到 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 的工具的库。