设为首页 加入收藏

TOP

Phalcon 之命令行应用(Command Line Applications)
2015-07-20 17:28:56 来源: 作者: 【 】 浏览:2
Tags:Phalcon 命令 应用 Command Line Applications

CLI应用即是运行在命令行窗体上的应用。 主要用来实现后台任务, 命令行工具等。

结构(Structure)?

最小结构的CLI程序如下:

  • app/config/config.php
  • app/tasks/MainTask.php
  • app/cli.php 创建引导(Creating a Bootstrap)?

    普通的MVC程序中, 启动文件用来启动整个应用。 和web应用不同, 此处应用中我们使用cli.php来作为启动文件。

    下面是一个简单的启动文件示例:

        registerDirs(
         array(
             APPLICATION_PATH . '/tasks'
         )
     );
     $loader->register();
    
     //加载配置文件(如果存在)
     if(is_readable(APPLICATION_PATH . '/config/config.php')) {
         $config = include APPLICATION_PATH . '/config/config.php';
         $di->set('config', $config);
     }
    
     // 创建console应用
     $console = new ConsoleApp();
     $console->setDI($di);
    
     /**
     * 处理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;
         }
     }
    
     // 定义全局的参数, 设定当前任务及action
     define('CURRENT_TASK', (isset($argv[1]) ? $argv[1] : null));
     define('CURRENT_ACTION', (isset($argv[2]) ? $argv[2] : null));
    
     try {
         // 处理参数
         $console->handle($arguments);
     }
     catch (\Phalcon\Exception $e) {
         echo $e->getMessage();
         exit(255);
     }
    

    上面的代码可以使用如下方式执行:

    $ php app/cli.php
    

    这样程序会直接执行默认的任务及action.

    任务(Tasks)?

    这里的任务同于web应用中的控制器。 任一 CLI 应用程序都至少包含一个mainTask 及一个 mainAction, 每个任务至少有一个mainAction, 这样在使用者未明确的 指定action时 此mainAction就会执行。

    下面即是一个mainTask的例子( app/tasks/MainTask.php ): .. code-block:: php

    class MainTask extends PhalconCLITask {

    public function mainAction() {echo “nThis is the default task and the default action n”;

    }

    }

    处理动作参数(Processing action parameters)?

    CLI应用中, 开发者也可以在action中处理传递过来的参数, 下面的例子中已经对传递过来的参数进行了处理。

        PHP_EOL;
           echo sprintf('best regards, %s', $params[1]) . PHP_EOL;
       }
    }
    

    我们可以使用下面的命令行及参数执行程序:

    $ php app/cli.php main test world universe
    
    hello world
    best regards, universe
    

    链中运行任务(Running tasks in a chain)?

    CLI应用中可以在一个action中执行另一action. 要实现这个需要在 DI 中设置console.

        setShared('console', $console);
    
    try {
        // handle incoming arguments
        $console->handle($arguments);
    }
    

    然后开发者即可在一个action中使用用其它的action 了. 下面即是例子:

        console->handle(array(
               'task' => 'main',
               'action' => 'test'
            ));
        }
    
        public function testAction() {
            echo '\nI will get printed too!\n';
        }
    }
    

    当然, 通过扩展 \Phalcon\CLI\Task 来实现如上操作会是一个更好主意。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 4081 Qin Shi Huang's Na.. 下一篇Duanxx的C++学习: const指针详解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)