thinkphp模块分组后,cli模式无法使用的调整方法

今天使用thinkphpcli模式,折腾了半天,总是出现错误,并且跳转到空模块下,或者出现Action中方法无法使用的错误。经查看源码,发现thinkphpcli模式不支持模块分组,而且Action是重写的,比标准模式下的Action简化了很多。Cli模式下Action类中的方法使用不多,暂且不用管他,主要来调整一下,让cli模式支持模块分组

进入Thinkphp的核心目录,找到文件App.class.php,具体路径是:Extend/Mode/Cli/App.class.php
第一步,获取GROUP_NAME

大约是38行开始:

define('MODULE_NAME',   !empty($params)?array_shift($params):C('DEFAULT_MODULE'));   
define('ACTION_NAME',  !empty($params)?array_shift($params):C('DEFAULT_ACTION'));

修改为:

// 取得模块和操作名称
if(C('APP_GROUP_LIST')) {
    define('GROUP_NAME',   !empty($params)?array_shift($params):C('DEFAULT_GROUP'));
    define('MODULE_NAME',  !empty($params)?array_shift($params):C('DEFAULT_MODULE'));
    define('ACTION_NAME',  !empty($params)?array_shift($params):C('DEFAULT_ACTION'));
}
else{
    define('MODULE_NAME',  !empty($params)?array_shift($params):C('DEFAULT_MODULE'));
    define('ACTION_NAME',  !empty($params)?array_shift($params):C('DEFAULT_ACTION')); 
}

这是URL_MODEL = 1的修改
下面还有URL_MODEL!=1的时候,将下面else中的内容替换为:

// 取得模块和操作名称
if(C('APP_GROUP_LIST')) {
    define('GROUP_NAME',   isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:C('DEFAULT_GROUP'));
    define('MODULE_NAME',   isset($_SERVER['argv'][2])?$_SERVER['argv'][2]:C('DEFAULT_MODULE'));
    define('ACTION_NAME',    isset($_SERVER['argv'][3])?$_SERVER['argv'][3]:C('DEFAULT_ACTION'));
    if($_SERVER['argc']>4) {
        // 解析剩余参数 并采用GET方式获取
         preg_replace('@(\w+),([^,\/]+)@e', '$_GET[\'\\1\']="\\2";', implode(',',array_slice($_SERVER['argv'],4)));
    }
}
else{
    define('MODULE_NAME',   isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:C('DEFAULT_MODULE'));
    define('ACTION_NAME',    isset($_SERVER['argv'][2])?$_SERVER['argv'][2]:C('DEFAULT_ACTION'));
    if($_SERVER['argc']>3) {
        // 解析剩余参数 并采用GET方式获取
        preg_replace('@(\w+),([^,\/]+)@e', '$_GET[\'\\1\']="\\2";', implode(',',array_slice($_SERVER['argv'],3)));
     }
}

第二步:修改$model

$module  =  A(MODULE_NAME);

修改为

if(C('APP_GROUP_LIST')) {
    $module  =  A(GROUP_NAME."/".MODULE_NAME);
}
else{
    $module  =  A(MODULE_NAME); 
}

说明:

1、修改的版本是Thinkphp3.0,如果是其他版本,可能有些出入,请对比代码自行修改 。
2、cli模式下,参数都是区分大小写的,所以,在写命令行时,分组名,模块名,方法名均需要区分大小写

传参 Mongodb snoopy调用还有点问题

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值