官方文档地址: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去掉。