最小結構的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 來實現如上操作會是一個更好主意。