博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
yaf && cli实战笔记
阅读量:5882 次
发布时间:2019-06-19

本文共 3141 字,大约阅读时间需要 10 分钟。

     为了更好的与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 

 

 
 

转载于:https://www.cnblogs.com/lv-xing-de-mu-ne/p/7300778.html

你可能感兴趣的文章
mysql数据类型(02)
查看>>
mysql 密码重置
查看>>
zencart网店安全设置
查看>>
我的友情链接
查看>>
osCommerce 数据库结构详解
查看>>
我的友情链接
查看>>
WebSocket实现即时聊天室
查看>>
Solaris缩小swap分区
查看>>
搭建DHCP服务器和配置
查看>>
Java Web开发Session超时设置
查看>>
linux下,配置jdk、安装weblogic11g及新建域
查看>>
Ceph:Unknown lvalue 'TasksMax' in section 'Service
查看>>
Lucene的API使用
查看>>
一个软件包下载地址
查看>>
用virtualbox虚拟机无法上网的解决方法
查看>>
对“Eloquent ORM —— 关联关系”的重点笔记
查看>>
谢烟客---------Linux之ip及配置网络连接方法(ifcfg、ip、配置文件)
查看>>
【存储】NFS搭建
查看>>
iOS 后台进入前台刷新当前界面
查看>>
【C语言】用c编写乘法口诀表
查看>>