yaf cli模式执行控制器方法操作,yaf cli模式执行控制器方法可传递参数

      网上看了很多例子关于yaf怎么在cli模式下执行模块、控制器、方法+参数的例子,也跟着搬了很多例子,大多的都不行。所以为了用yaf,或者想用yaf到实际项目的猿们,我决定把自己在yaf里面踩过的坑都跟大家分享出来,我用的yaf版本是3.0.7

    思路: 默认情况下yaf在cli模式下是会跑到index模块,index方法,index控制器的(即application\controllers\Index.php),那么我们在这个控制器上面增加点代码,判断是cli访问的话就让它根据传入来的模块控制器方法,参数,执行不同的操作

yaf cli的使用场景:

     yaf在cli模式下执行index/demo/db 方法(index/demo/db其中index是模块,demo是方法,db是方法)

     解决:php  index.php "index/demo/db"

    yaf在cli模式下执行index/demo/db 方法,并且传递参数a=100&b=200

    执行:php  index.php "index/demo/db" "a=100&b=200"

    yaf在cli模式下传递的参数控制器中接收参数用:$params = Yaf_Controller_Abstract::getRequest()->getParams();

代码如下:

<?php
/**
 * @name IndexController
 * @author Administrator
 * @desc 默认控制器
 */
class IndexController extends Yaf_Controller_Abstract {
	/** 
     * 默认动作
     * cli模式全部先跑这里,然后再根据不同的模块/控制器/方法,参数调用不用的方法
     */
	public function indexAction(){
        //php index.php "index/demo/rmqhello"
        if(PHP_SAPI == 'cli'){
            if(isset($_SERVER['argv'][1])){
                $mvc = explode('/',$_SERVER['argv'][1]);
                $module = isset($mvc[0])?$mvc[0]:'';
                $controller = isset($mvc[1])?$mvc[1]:'';
                $action = isset($mvc[2])?$mvc[2]:'';
                $params = isset($_SERVER['argv'][2])?$this->convertUrlQuery($_SERVER['argv'][2]):[];
                $this->forward($module,$controller,$action,$params);
            }
        }
       /**
         * 把参数a=100&b=200解析成array('a'=>100,'b'=>200),written:yagnxignyi
         */
        function convertUrlQuery($query)
        {
            $queryParts = explode('&', $query);
            $params = array();
            foreach ($queryParts as $param) {
                $item = explode('=', $param);
                $params[$item[0]] = $item[1];
            }
            return $params;
        }
	}

以上代码可以解决你在yaf cli模式下无法执行控制器方法的问题,如对你有帮助或者疑问请留言。

    

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值