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. 《Python数据分析》-Ch01 Python 程序库入门

    Ch01 Python 程序库入门   1.1 一些简要介绍: NumPy 是一个基础性的Python库,为我们提供了常用的数值数组和函数. SciPy是Python的科学计算库,对NumPy的功能进 ...

  2. POJ 1836 Alignment (双向DP)

    Alignment Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 10804   Accepted: 3464 Descri ...

  3. oracle导表小结

    事件描述:从A主机oracle服务器导出.sql文件到B主机,发现1.导入存在乱码 2.提示USERS表空没有权限(A B主机均为window系统) 1.针对第一点乱码 首先确认系统的默认字符编码GB ...

  4. OAF_OAF增删改-新增的实现(案例)

    2014-09-14 Created By BaoXinjian

  5. Unix环境高级编程(十五)高级I/O

    1.非阻塞I/O 对低速设备的I/O操作可能会使进程永久阻塞,这类系统调用主要有如下情况:(1)如果数据并不存在,则读文件可能会使调用者永远阻塞(例如读管道.终端设备和网络设备).(2)如果数据不能立 ...

  6. 使用Frame控件设计Silverlight的导航

    这里所说的导航其实就是在Silverlight的页面之间前进后退以及跳转.通过Frame控件配合后台NavigationService类可以很容易的做到页面之间的导航. 这就是工具箱中的Frame控件 ...

  7. vim设置文本宽度

    'textwidth' 'tw'        number  (default 0)                        local to buffer                   ...

  8. js+json用表格实现简单网站左侧导航

    闲暇之余,制作一用表格实现的简单的网站导航条,分享给大家.这里的数据基于json格式,学习json的朋友可以参考下. 调用很简单,只要将数据组织成json格式即可:格式如下:  window.onlo ...

  9. [svc][op]LVS+keepalived

    lvs是一种负载均衡技术.注意区分负载均衡和高可用的区别. keepalive是lvs的管理工具 ipvsadm也是lvs的管理工具 keepalive借助ipvsadm管理lvs.所以通常说lvs+ ...

  10. 【Android】10.1 扩展组件库和其他视图--本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-18 1.主界面运行截图 2.MainActivity.cs文件中对应的代码 chItems.Add(new Chapter() ...