zoukankan      html  css  js  c++  java
  • phalcon的CLI应用

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

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


    创建bootstrap

    use PhalconDIFactoryDefaultCLI as CliDI;
    use PhalconCLIConsole 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 PhalconLoader();
    $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 (PhalconException $e) {
      echo $e->getMessage();
      exit(255);
    }

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

    任务
    cli应用至少要有一个默认的任务mainTask和一个默认的行为:mainAction.
    class mainTask extends PhalconCLITask  {
      public function mainAction() {
        echo " This is the default task and the default action ";
      }
      /**
      * @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 PhalconCLITask {
      public function mainAction() {
        echo " This is the default task and the default action ";
        $this->console->handle(array(
          'task' => 'main',
          'action' => 'test'
        ));
      }
      public function testAction() {
        echo ' I will get printed too! ';
      }
    }

  • 相关阅读:
    20155305 2016-2017-2 《Java程序设计》实验二 Java面向对象程序设计
    20155305乔磊2016-2017-2《Java程序设计》第八周学习总结
    20155305 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + IDEA)
    20155305乔磊2016-2017-2《Java程序设计》第七周学习总结
    20155305乔磊2016-2017-2《Java程序设计》第六周学习总结
    2017-2018-1 20155302 《信息安全系统设计基础》第3周学习总结
    20155302 第二周课堂实践
    2017-2018-1 20155302 《信息安全系统设计基础》第1周学习总结
    20155302杨效宸《Java程序设计》课程总结
    20155302实验五 网络编程与安全
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8295254.html
Copyright © 2011-2022 走看看