创建命令行(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` 并在那里实现这种逻辑是一个更好的主意。
';