网站建设我要自学网,中国建设官方网站登录,营销软文范文200字,windows优化大师以往写cli下运行的业务或者测试代码#xff0c;总是新建文件#xff0c;面向过程编写代码。几次之后#xff0c;cli目录下好多文件#xff0c;即便勉强在一个cli测试文件中写了一个类#xff0c;也是让其中的一个方法自启动#xff0c;要测试别的方法#xff0c;总是要修…以往写cli下运行的业务或者测试代码总是新建文件面向过程编写代码。几次之后cli目录下好多文件即便勉强在一个cli测试文件中写了一个类也是让其中的一个方法自启动要测试别的方法总是要修改代码很是繁琐。昨天接触了phalcon的cli, 犹如醍醐灌顶 特此发文分享。首先温故而知新在浏览器中访问php:http(s)://test.php.local/index.php?mfrontcorderagetListp2cate1调试期间每次都敲m、c、a太繁琐了url简化一下http(s)://test.php.local/index.php/front/order/getList?p2cate1然后index.php会做的事情必定包括加载配置文件加载Autoload.php, 各种function.phpDispatcher::run()初始化Db类(此时并没有连接mysql)分析url, 得到front/order/getList 之后$obj new /app/front/controller/Order();$obj-getList(); //别担心Autoload类帮我们自动加载类文件....在cli中我们这样访问php(先用cd进入项目根目录)php public/cli.php--m cli --c order --a updateMarketPrice --param value文件名之后就是“--参数 值 --参数 值 ” 这么有规律可以直接用getopt()获取m、c、a参数:$arr [ m:, a:, c: ];$mca getopt( , $arr );注意如果企图简化为php public/cli.php/cli/order/updateMarketPrice --param value那么在linux中public/cli.php/cli/order/updateMarketPrice会被认为是一个文件因为不存在导致打开失败据本猿所知有2种简化方式php public/cli.php cli/order/updateMarketPrice --param value或者php public/cli.php cli order updateMarketPrice --param value文件名之后不是以--开头 getopt()不认识就罢工了还好有php自带的全局变量$argv它是一个数组(以第2种方式为例)之后便是分析$argv这个数组取得m、c(此处实际应该叫t, task)、a 组合数组$paramsArr, 以便给业务方法用。cli.php必然也做以下事情加载配置文件加载Autoload.php, 各种function.phpCliDispatcher::run()初始化Db类(此时并没有连接mysql)分析url, 得到front/order/getList 之后$obj new /app/cli/task/Order(); $obj-updateMarketPrice($paramsArr); //别担心, Autoload类帮我们自动加载类文件....注意另起CliDispatcher类。 Dispatcher类已经通过了重重考验不要再动它了再说这也不符合面向对象的原则之一对扩展开放对修改关闭使用Task而不是controller 是为了避免这样的情况控制器中业务需要调用cli模块中的方法发送微信模板消息什么的代码写着写着走神了直接new /app/cli/task/Order()由于AutoLoad类认定控制器一定在controller目录在而cli模块却是放在task目录下导致加载失败抛出错误 同时输出建议就像一盆凉水一样立即“浇醒”开发者想想要是cli模块是放在controller目录下, 还被顺利执行...和cgi下不同没有$_GET, 没有$_POST, 而且$_SERVER中关于url的各种信息也是没有的记得给予参数不然取参(“餐”)无门..$obj-updateMarketPrice($paramsArr);cli模块的各种logic类 记得判断是否php是否在cli下运行以免被其他cig下运行的模块直接调用各位小伙伴请在评论中留下你的见解。举报/反馈