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
console->handle(array(
            'task' => 'main',
            'action' => 'test'
        ));
    }

    public function testAction()
    {
        echo '\nI will get printed too!\n';
    }

}

cli.php

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

你可能感兴趣的:(Phalcon的Console模式实现与使用)