CLI应用是命令行下执行的程序, 可以应用于定时任务,守护进程, 脚本, 公用命令等等.

最小的目录结构:
app/config/config.php
app/tasks/MainTask.php
app/cli.php <– main bootstrap file

创建bootstrap

use Phalcon\DI\FactoryDefault\CLI as CliDI;
use Phalcon\CLI\Console as ConsoleApp;
define('VERSION', '1.0.0');

//Using the CLI factory default services container
$di = new CliDI();
// Define path to application directory
defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__)));

/**
* Register the autoloader and tell it to register the tasks directory
*/
$loader = new \Phalcon\Loader();
$loader->registerDirs(
  array(
    APPLICATION_PATH . '/tasks'
  )
);
$loader->register();

// Load the configuration file (if any)
if(is_readable(APPLICATION_PATH . '/config/config.php')) {
  $config = include APPLICATION_PATH . '/config/config.php';
  $di->set('config', $config);
}

//Create a console application
$console = new ConsoleApp();
$console->setDI($di);

/**
* Process the console arguments
*/
$arguments = array();
$params = array();

foreach($argv as $k => $arg) {
  if($k == 1) {
    $arguments['task'] = $arg;
  } elseif($k == 2) {
    $arguments['action'] = $arg;
  } elseif($k >= 3) {
    $params[] = $arg;
  }
}
if(count($params) > 0) {
  $arguments['params'] = $params;
}

// define global constants for the current task and action
define('CURRENT_TASK', (isset($argv[1]) ? $argv[1] : null));
define('CURRENT_ACTION', (isset($argv[2]) ? $argv[2] : null));

try {
  // handle incoming arguments
  $console->handle($arguments);
}
catch (\Phalcon\Exception $e) {
  echo $e->getMessage();
  exit(255);
}

命令行下启用用例:
$ php app/cli.php

任务
cli应用至少要有一个默认的任务mainTask和一个默认的行为:mainAction.
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

任务链:
要支持任务链首先定义DI:
$di->setShared('console', $console);
try {
  // handle incoming arguments
  $console->handle($arguments);
}
然后就可以使用控制台的任何任务了:
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应用的更多相关文章

  1. phalcon: tasks MainTask.php命令行工具

    phalcon: tasks MainTask.php命令行工具 tasks MainTask.php 一般用来做计划任务,处理比较复杂的大型的数据.然后其他功能或程序才能更简单的读取这些复杂的数据. ...

  2. [Phalcon] DI默认的服务

    代码,说明一切 namespace Phalcon\Di\FactoryDefault; use Phalcon\Di\Service; use Phalcon\Di\FactoryDefault; ...

  3. phalcon: Windows 下 Phalcon dev-tools 配置 和 Phpstorm中配置Phalcon 代码提示, phalcon tools的使用

    准备: phalcon-devtools包 下载地址: https://github.com/phalcon/phalcon-devtools 解压到wampserver的www目录 (xampp 用 ...

  4. 使用Phalcon框架开发一个简易的博客系统

    使用Phalcon PHP框架开发一个简易的博客系统(类似于CMS) 最近在做Phalcon(Phalcon在英文中指的是鸟类中飞得最快的那一个物种,由于是高性能框架,借用了这个词)相关的项目,由于刚 ...

  5. PHP 命令行模式实战之cli+mysql 模拟队列批量发送邮件(在Linux环境下PHP 异步执行脚本发送事件通知消息实际案例)

    源码地址:https://github.com/Tinywan/PHP_Experience 测试环境配置: 环境:Windows 7系统 .PHP7.0.Apache服务器 PHP框架:ThinkP ...

  6. centos 安装 phalcon

    git clone --depth 1 --branch phalcon-v2.0.3 https://github.com/phalcon/cphalcon.git cd cphalcon/ext ...

  7. GY的实验室 - Phalcon+Nginx+PHP-FPM环境搭建(转)

    Phalcon简介 由于半路出家的缘故,没用过几个PHP框架,第一个了解的框架是公司自己的,然后又试着用了Yii,CI.在读了CSDN在某度的高排名翻译文章(PHP开发框架流行度排名:Laravel居 ...

  8. .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门

    2016年6月27日.NET Core & ASP.NET Core 1.0在Redhat峰会上正式发布,社区里涌现了很多文章,我也计划写个系列文章,原因是.NET Core的入门门槛相当高, ...

  9. 跨越语言的障碍:C++/CLI 调用 C#

    首先我想投诉一下博客园首页右边栏的广告..最近总是出现很恐怖的整容脸的广告.真的是吓坏了.=.=大家有同感吗? 博客园前一阵子掀起了语言的广泛讨论,事实上语言的争执在整个程序员圈子也没有停止过.以我个 ...

随机推荐

  1. NYOJ——————数的长度(斯特林公式的应用)

    数的长度 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 N!阶乘是一个非常大的数,大家都知道计算公式是N!=N*(N-1)······*2*1.现在你的任务是计算出 ...

  2. 32个Chrome 针对网页设计师和开发人员扩展

    http://zmingcx.com/32-chrome-web-designers-and-developers-to-expand.html

  3. RabbitMQ消息队列(三):任务分发机制[转]

    在上篇文章中,我们解决了从发送端(Producer)向接收端(Consumer)发送“Hello World”的问题.在实际的应用场景中,这是远远不够的.从本篇文章开始,我们将结合更加实际的应用场景来 ...

  4. WordPress For SAE进入后台

    今天遇到一个非常easy可是花了我半个小时的问题:怎样进入WordPress For SAE后台. 介于百度上没有搜索到.所以写了这篇博客,简单,but有用. 首先我们会訪问自己的网站:独立游戏者er ...

  5. 云从科技 OCR任务 pixel-anchor 方法

    云从科技提出了一种端到端的深度学习文本检测框架Pixel-Anchor,通过特征共享的方式高效的把像素级别的图像语义分割和锚检测回归放入一个网络之中, 把像素分割结果转换为锚检测回归过程中的一种注意力 ...

  6. spine 2.1.27 Pro 叠加方式(Blending)

    将spine更新到2.1.27 Pro,发现有更多的叠加方式可用了,如图: 以前则只有Normal和Additive可选. 更多的叠加方式对于用spine做特效动画还是比较有用的.不过我还没试这些叠加 ...

  7. eclipse部署class默认在build文件夹

    1.eclipse新建的Dynamic web project 默认是将类编译在build如果在eclipse中配置了tomcate(server项),用自带的发布功能,是能自动识别的.2.自已修改到 ...

  8. Clojure 的 Enlive 库尝试

    Enlive 是一个 Clojure 下的 html 模板引擎.其特别之处在于,它既没有发明任何 html 内嵌的模板 DSL 语法:也不会混杂代码和表现. 一切的一切,都是按下列模型定义的次序执行的 ...

  9. typedef的用法再思考

    最近重读c语法,有所感悟,记录. 有时候感悟,其实就是猜,假想,作者创建语言的想法,通俗的讲就是丹尼斯灵魂附体了,这个时候任何c语言难点对于你来说,就像吃饭喝水一样简单了,同时还能发现它优美动人之处. ...

  10. [na]那些OVER的封装(pppoe/ppp/ipsec)

    什么over什么,如pppoe, ppp的封装都在over对象之后,入下图: PPPOE Ipsec