最小結構的CLI程序如下:
普通的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.
這裡的任務同於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”;
}
}
CLI應用中, 開發者也可以在action中處理傳遞過來的參數, 下面的例子中已經對傳遞過來的參數進行了處理。
我們可以使用下面的命令行及參數執行程序:
$ 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 來實現如上操作會是一個更好主意。