Phalcon的Console模式实现与使用

前提:需要通过定时任务调用项目脚本执行业务逻辑

实现效果

php  app/console/cli.php  taskName   actionName  params=1 params=2         ------->     params=(1,2)

php app/console/cli.php  

php app/console/cli.php main test (默认例子)

方式

  • 入口文件cli.php
  • 配置文件config/core-cli.php
  • 启动程序Console.php
  • 脚本任务命名空间Consoles\Task\
  • 命令行运行参数处理 $args
  • 引入项目本身的服务与配置:共享MVC等组件
  • 使用路由分发器Dispatcher: Phalcon\Cli\Dispatcher
  • 脚本任务类:Phalcon\Cli\Task
<?php

namespace Core\base;

use Library\Traits\Response;
use Phalcon\Cli\Task;

class BaseTask extends Task
{
    use Response;

    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';
    }

}

cli.php

<?php
require_once dirname(dirname(__FILE__)) . "/../vendor/autoload.php";
const ENV_DEV = 'dev';
const USER_AUTH_TOKEN = 'USER_AUTH_TOKEN';

$dotEnv = \Dotenv\Dotenv::create(dirname(dirname(dirname(__FILE__))));
$dotEnv->load();
define('VERSION', '1.0.0');
// 定义应用目录路径
defined('CONSOLE_TASK_PATH')
|| define('CONSOLE_TASK_PATH', realpath(dirname(__FILE__)));
define('PROJECT_PATH', dirname(dirname(dirname(__FILE__))));
define('APPLICATION_PATH', dirname(dirname(dirname(__FILE__))) . '/app');
define('LIBRARY_PATH', dirname(dirname(dirname(__FILE__))) . '/library');
define('APPLICATION_ENV', getenv('APPLICATION_ENV') ?: ENV_DEV);
define('ROOT', dirname(dirname(__DIR__)));


$config = include PROJECT_PATH . '/config/core-cli.php';

/**
 * 处理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;
    }
}

// 定义全局的参数, 设定当前任务及动作
define('CURRENT_TASK', (isset($argv[1]) ? $argv[1] : null));
define('CURRENT_ACTION', (isset($argv[2]) ? $argv[2] : null));

try {
    $consoleApp = new Core\Console(APPLICATION_ENV, $config);
    $console = $consoleApp->bootstrap();
    $console->registerModules($config['application']['modules'], true);
    $console->handle($arguments);

} catch (\Exception $e) {
    echo $e->getMessage();
    exit(400);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,875评论 0 10
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,939评论 0 5
  • http://blog.csdn.net/shupan001/article/details/7176210从版本...
    yancolin阅读 720评论 0 0
  • 小明回家高兴的对妈妈说:妈我今天在外面吃面赚大了, 妈妈:为什么呀? 小明:我拿十块钱吃了碗八块钱的面,老板竟然找...
    RainyCai阅读 193评论 0 1
  • 随后经朋友介绍又接触直播平台刷单,兜兜转转自己也学了不少东西,长了很多见识,也有了小额回报。 到现在当接触这份兼职...
    拘谨与洒脱阅读 126评论 0 0