官方文檔地址:http://yaf.laruence.com/manual/yaf.incli.times.html
感覺文檔寫得有點簡單,不好理解,這里聊下我是怎么用的yaf命令行。
### 簡述
在yaf中用到命令行大多是為了跑Crontab,首先,為了更好的與web區分(配置文件,argc、argv判斷等等).重新創建一個入口文件是比較好的做法。
### 方法一
在項目根目錄下面新建一個cli.php文件:
`<?php
define("APP_PATH", realpath(dirname(__FILE__)));
$app = new Yaf_Application(APP_PATH . "/conf/application.ini");
$app->getDispatcher()->dispatch(new Yaf_Request_Simple());`
這樣入口文件就完成了。
然后再新建一個接收命令和操作的控制器Crontab.php:
`<?php
class CrontabController extends Yaf_Controller_Abstract {
public function init()
{
Yaf_Dispatcher::getInstance()->disableView();
}
public function indexAction($username = '')
{
//to do a crontab
echo 'we get the name is : '.$username;
}
}
?>`
接下來,我們在命令行中調用。在命令行中切換到你的項目目錄,就是cli.php所在目錄,然后輸入如下命令:
> php cli.php request_uri="/crontab/index"
OK,是不是在命令行看到了輸出的字符串。
request_uri=”/crontab/index” 中的路徑便是Controller的路由路徑.
在例子里指向/controllers/Crontab.php 中的 indexAction().
### 方法二
還有一種方法,通過Yaf_Application::execute(..)去實現。
先看一下這個函數的定義:
> public void Yaf_Application::execute ( callable $entry , string $... )
This method is typically used to run Yaf_Application in a crontab work. Make the crontab work can also use the autoloader and Bootstrap mechanism.
第一參數需要定義一個回調函數,也可以是一個類中的某個函數。
示例:$application->execute(“main”, $argc, $argv);
或
$application->execute(array(“Class”,”Method”), $argc, $argv);
后面的參數為一個可變列表,值為你希望傳入的參數。
如些,我們將剛才新建的cli.php文件改寫成:
`<?php
define("APP_PATH", realpath(dirname(__FILE__)));
$app = new Yaf_Application(APP_PATH . "/conf/application.ini");
$app->bootstrap()->execute(array('CrontabController','indexAction'),'wulei');`
其中如果你需要用bootstrap的初始化的,可以保留,如果不需要的話,也可以把bootstrap去掉。