爲了更好的與web區分(配置文件,argc、argv判斷等等).從新建立一個入口文件是比較好的作法。php
1 $app = new YafApplication(APP_PATH . "/conf/application.ini"); 2 3 $app->getDispatcher()->dispatch(new YafRequestSimple());
這樣入口文件就完成了。接下來,你須要學會yaf命令行的調用方法。來一個示例:web
1 php cli.php request_uri="/daemon/start"
Yaf_Request_Simple的構造函數能夠不接受任何參數, 在這種狀況下, Yaf_Request_Simple會在命令行參數中, 尋找一個字符串參數, 若是找到, 則會把請求的request_uri置爲這個字符串。數據庫
request_uri=」/daemon/start」 中的路徑即是Controller的路由路徑。在例子裏指向/Controller/Daemon.php 中的 startAction()。bootstrap
還有一種方法,經過Yaf_Application::execute(..)去實現。先看一下這個函數的定義:app
1 public void Yaf_Application::execute ( callable $entry , string $... ) 2 2 3 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.
第一參數須要定義一個回調函數,也能夠是一個類中的某個函數。示例:函數
1 $application->execute("main", $argc, $argv);
或this
1 $application->execute(array("Class","Method"), $argc, $argv);
後面的參數爲一個可變列表,值爲你但願傳入的參數。綜上所述,咱們的另一種入口文件能夠寫成:spa
1 $app = new YafApplication(APP_PATH . "/conf/application.ini"); 2 2 3 $app->execute('callback', $avg1, $avg2 , ...);
若是須要經過bootstrap去初始化。只須要和web同樣改成:命令行
1 $app->bootstrap()->execute('callback', $avg1, $avg2 , ...);
1 // parse cli 2 3 if ($request->isCli ()) { 4 5 global $argc, $argv; 6 7 if ($argc > 1) { 8 9 $module = ''; 10 11 $uri = $argv [1]; 12 13 if (preg_match ( '/^[^?]*%/i', $uri )) { 14 15 list ( $module, $uri ) = explode ( '%', $uri, 2 ); 16 } 17 18 $module = strtolower ( $module ); 19 20 $modules = Yaf_Application::app ()->getModules (); 21 22 if (in_array ( ucfirst ( $module ), $modules )) { 23 24 $request->setModuleName ( $module ); 25 26 } 27 28 if (false === strpos ( $uri, '?' )) { 29 30 $args = array (); 31 32 } else { 33 34 list ( $uri, $args ) = explode ( '?', $uri, 2 ); 35 36 parse_str ( $args, $args ); 37 38 } 39 40 foreach ( $args as $k => $v ) { 41 42 $request->setParam ( $k, $v ); 43 44 } 45 46 $request->setRequestUri ( $uri ); 47 48 if ($request->isRouted () && ! empty ( $uri )) { 49 50 if (false !== strpos ( $uri, '/' )) { 51 52 list ( $controller, $action ) = explode ( '/', $uri ); 53 54 $request->setActionName ( $action ); 55 56 } else { 57 $controller = $uri; 58 59 } 60 61 $request->setControllerName ( ucfirst ( strtolower ( $controller ) ) ); 62 63 } 64 65 } 66 67 }
如下爲個人項目開發實例代碼:code
1 //cli.php 入口文件 2 <?php 3 # 全局 4 define("APPLICATION_PATH", realpath((phpversion() >= "5.3"? __DIR__: dirname(__FILE__)).'/../')); 5 date_default_timezone_set("Asia/Shanghai"); 6 # 加載配置文件 7 $app = new Yaf_Application(APPLICATION_PATH . "/conf/application.ini", 'common'); 8 # 數據庫配置 9 Yaf_Registry::set("config", $config = Yaf_Application::app()->getConfig()); 10 # request_uri 11 $app->getDispatcher()->dispatch(new Yaf_Request_Simple());
1 //lib 雞肋(基類) 2 <?php 3 /** 4 * cli base 5 */ 6 abstract class Ctrl_Cli extends Yaf_Controller_Abstract{ 7 /** 8 * 構造函數 9 */ 10 public function init(){ 11 #only for cli 12 if(!$this->getRequest()->isCli()){ 13 ErrorController::page403(); 14 } 15 } 16 }
1 //功能類和方法 2 <?php 3 class Cli_InviteController extends Ctrl_Cli 4 { 5 /** 6 * @desc 邀請推薦獎勵 7 */ 8 public function indexAction() 9 { 10 11 12 exit('finish'); 13 } 14 }