为了更好的与web区分(配置文件,argc、argv判断等等).重新创建一个入口文件是比较好的做法。
1 $app = new YafApplication(APP_PATH . "/conf/application.ini");2 3 $app->getDispatcher()->dispatch(new YafRequestSimple());
这样入口文件就完成了。接下来,你需要学会yaf命令行的调用方法。来一个示例:
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()。
还有一种方法,通过Yaf_Application::execute(..)去实现。先看一下这个函数的定义:
1 public void Yaf_Application::execute ( callable $entry , string $... )2 23 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);
或
1 $application->execute(array("Class","Method"), $argc, $argv);
后面的参数为一个可变列表,值为你希望传入的参数。综上所述,我们的另外一种入口文件可以写成:
1 $app = new YafApplication(APP_PATH . "/conf/application.ini");2 23 $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 }
以下为我的项目开发实例代码:
1 //cli.php 入口文件 2 = "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_uri11 $app->getDispatcher()->dispatch(new Yaf_Request_Simple());
1 //lib 鸡肋(基类) 2 getRequest()->isCli()){13 ErrorController::page403();14 }15 }16 }
1 //功能类和方法 2