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