通过 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');
有关更多信息,请参阅 路由 页面。
通过 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 工具的库。