创建命令行(CLI)应用程序

最后更新于:2022-04-02 05:13:49

[TOC] # 创建命令行(CLI)应用程序 CLI应用程序从命令行执行。它们对于创建定时作业,脚本,命令实用程序等非常有用。 ## 结构 CLI应用程序的最小结构如下所示: * `app/config/config.php` * `app/tasks/MainTask.php` * `app/cli.php` 主启动文件 ## 创建启动程序 与常规MVC应用程序一样,启动程序文件用于启动应用程序。我们使用`cli.php`文件来启动应用程序,而不是Web应用程序中的`index.php`启动程序。 下面是一个用于此示例的示例启动程序。 ```php registerDirs( [ __DIR__ . '/tasks', ] ); $loader->register(); // 加载配置文件(如果有) $configFile = __DIR__ . '/config/config.php'; if (is_readable($configFile)) { $config = include $configFile; $di->set('config', $config); } // 创建控制台应用程序 $console = new ConsoleApp(); $console->setDI($di); /** * 处理控制台参数 */ $arguments = []; foreach ($argv as $k => $arg) { if ($k === 1) { $arguments['task'] = $arg; } elseif ($k === 2) { $arguments['action'] = $arg; } elseif ($k >= 3) { $arguments['params'][] = $arg; } } try { // 处理传入的参数 $console->handle($arguments); } catch (\Phalcon\Exception $e) { // Phalcon在这里做了相关的事情 // .. fwrite(STDERR, $e->getMessage() . PHP_EOL); exit(1); } catch (\Throwable $throwable) { fwrite(STDERR, $throwable->getMessage() . PHP_EOL); exit(1); } ``` 这段代码可以使用以下命令运行: ```bash php app/cli.php ``` ## 任务 任务与控制器类似。任何CLI应用程序至少需要一个`MainTask`和一个`mainAction`,并且每个任务都需要有一个`mainAction`,如果没有明确给出任何操作,它将运行。 下面是 `app/tasks/MainTask.php` 文件的示例: ```php setShared("console", $console); try { // 处理传入的参数 $console->handle($arguments); } catch (\Phalcon\Exception $e) { // Phalcon在这里做了相关的事情 // .. fwrite(STDERR, $e->getMessage() . PHP_EOL); exit(1); } catch (\Throwable $throwable) { fwrite(STDERR, $throwable->getMessage() . PHP_EOL); exit(1); } ``` 然后你可以在任何任务中使用控制台。下面是修改后的MainTask.php的示例: ```php console->handle( [ "task" => "main", "action" => "test", ] ); } public function testAction() { echo "I will get printed too!" . PHP_EOL; } } ``` 但是,扩展 `Phalcon\Cli\Task` 并在那里实现这种逻辑是一个更好的主意。
';