php 创建任务程序命令行,创建命令行(CLI)应用程序

[TOC]

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

CLI应用程序从命令行执行。它们对于创建定时作业,脚本,命令实用程序等非常有用。

## 结构

CLI应用程序的最小结构如下所示:

* `app/config/config.php`

* `app/tasks/MainTask.php`

* `app/cli.php` 主启动文件

## 创建启动程序

与常规MVC应用程序一样,启动程序文件用于启动应用程序。我们使用`cli.php`文件来启动应用程序,而不是Web应用程序中的`index.php`启动程序。

下面是一个用于此示例的示例启动程序。

```php

use Phalcon\Di\FactoryDefault\Cli as CliDI;

use Phalcon\Cli\Console as ConsoleApp;

use Phalcon\Loader;

// 使用CLI工厂默认服务容器

$di = new CliDI();

/**

* 注册自动加载器并告诉它注册任务目录

*/

$loader = new Loader();

$loader->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

use Phalcon\Cli\Task;

class MainTask extends Task

{

public function mainAction()

{

echo 'This is the default task and the default action' . PHP_EOL;

}

}

```

## 处理动作参数

可以将参数传递给操作,其代码已经存在于示例启动程序中。

如果使用以下参数和操作运行应用程序:

```php

use Phalcon\Cli\Task;

class MainTask extends Task

{

public function mainAction()

{

echo 'This is the default task and the default action' . PHP_EOL;

}

/**

* @param array $params

*/

public function testAction(array $params)

{

echo sprintf('hello %s', $params[0]);

echo PHP_EOL;

echo sprintf('best regards, %s', $params[1]);

echo PHP_EOL;

}

}

```

然后我们可以运行以下命令:

```bash

php app/cli.php main test world universe

hello world

best regards, universe

```

## 链式操作运行任务

如果需要,还可以用链式操作运行任务。要实现此目的,您必须将控制台本身添加到DI:

```php

$di->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

use Phalcon\Cli\Task;

class MainTask extends Task

{

public function mainAction()

{

echo "This is the default task and the default action" . PHP_EOL;

$this->console->handle(

[

"task" => "main",

"action" => "test",

]

);

}

public function testAction()

{

echo "I will get printed too!" . PHP_EOL;

}

}

```

但是,扩展 `Phalcon\Cli\Task` 并在那里实现这种逻辑是一个更好的主意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值