首页 > 代码库 > Phalcon 之命令行应用(Command Line Applications)
Phalcon 之命令行应用(Command Line Applications)
CLI应用即是运行在命令行窗体上的应用。 主要用来实现后台任务, 命令行工具等。
结构(Structure)?
最小结构的CLI程序如下:
- app/config/config.php
- app/tasks/MainTask.php
- app/cli.php <– 启动文件
创建引导(Creating a Bootstrap)?
普通的MVC程序中, 启动文件用来启动整个应用。 和web应用不同, 此处应用中我们使用cli.php来作为启动文件。
下面是一个简单的启动文件示例:
<?php use Phalcon\DI\FactoryDefault\CLI as CliDI, Phalcon\CLI\Console as ConsoleApp; define(‘VERSION‘, ‘1.0.0‘); //使用CLI工厂类作为默认的服务容器 $di = new CliDI(); // 定义应用目录路径 defined(‘APPLICATION_PATH‘) || define(‘APPLICATION_PATH‘, realpath(dirname(__FILE__))); /** * * 注册类自动加载器 */ $loader = new \Phalcon\Loader(); $loader->registerDirs( array( APPLICATION_PATH . ‘/tasks‘ ) ); $loader->register(); //加载配置文件(如果存在) if(is_readable(APPLICATION_PATH . ‘/config/config.php‘)) { $config = include APPLICATION_PATH . ‘/config/config.php‘; $di->set(‘config‘, $config); } // 创建console应用 $console = new ConsoleApp(); $console->setDI($di); /** * 处理console应用参数 */ $arguments = array(); foreach($argv as $k => $arg) { if($k == 1) { $arguments[‘task‘] = $arg; } elseif($k == 2) { $arguments[‘action‘] = $arg; } elseif($k >= 3) { $arguments[‘params‘][] = $arg; } } // 定义全局的参数, 设定当前任务及action define(‘CURRENT_TASK‘, (isset($argv[1]) ? $argv[1] : null)); define(‘CURRENT_ACTION‘, (isset($argv[2]) ? $argv[2] : null)); try { // 处理参数 $console->handle($arguments); } catch (\Phalcon\Exception $e) { echo $e->getMessage(); exit(255); }
上面的代码可以使用如下方式执行:
$ php app/cli.php
这样程序会直接执行默认的任务及action.
任务(Tasks)?
这里的任务同于web应用中的控制器。 任一 CLI 应用程序都至少包含一个mainTask 及一个 mainAction, 每个任务至少有一个mainAction, 这样在使用者未明确的 指定action时 此mainAction就会执行。
下面即是一个mainTask的例子( app/tasks/MainTask.php ): .. code-block:: php
<?php
class MainTask extends PhalconCLITask {
- public function mainAction() {
- echo “nThis is the default task and the default action n”;
}
}
处理动作参数(Processing action parameters)?
CLI应用中, 开发者也可以在action中处理传递过来的参数, 下面的例子中已经对传递过来的参数进行了处理。
<?php class MainTask extends \Phalcon\CLI\Task { public function mainAction() { echo "\nThis is the default task and the default action \n"; } /** * @param array $params */ public function testAction(array $params) { echo sprintf(‘hello %s‘, $params[0]) . PHP_EOL; echo sprintf(‘best regards, %s‘, $params[1]) . PHP_EOL; } }
我们可以使用下面的命令行及参数执行程序:
$ php app/cli.php main test world universe hello world best regards, universe
链中运行任务(Running tasks in a chain)?
CLI应用中可以在一个action中执行另一action. 要实现这个需要在 DI 中设置console.
<?php $di->setShared(‘console‘, $console); try { // handle incoming arguments $console->handle($arguments); }
然后开发者即可在一个action中使用用其它的action 了. 下面即是例子:
<?php class MainTask extends \Phalcon\CLI\Task { public function mainAction() { echo "\nThis is the default task and the default action \n"; $this->console->handle(array( ‘task‘ => ‘main‘, ‘action‘ => ‘test‘ )); } public function testAction() { echo ‘\nI will get printed too!\n‘; } }
当然, 通过扩展 \Phalcon\CLI\Task 来实现如上操作会是一个更好主意。
Phalcon 之命令行应用(Command Line Applications)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。