ThinkPHP 解析访问路径的坑

首先我得检讨:因为我的懒惰以及命名的不规范,踩到这个坑。
对于特殊需求你得单独想一个独特的命名而不能乱起名字。

使用 AJAX 以 POST 方式提交参数

a : "10001" 
b : "10013"

http://localhost/market/index.php/home/resource/searchGroup

报错非法操作 10001。很奇怪是吧。

通过翻看 ThinkPHP 的源码找到问题所在

ThinkPHP/Library/Think/Dispatcher.class.php

在这个文件里找到 getAction 方法

    /**
     * 获得实际的操作名称
     */
        static private function getAction($var,$urlCase) {
        $action   = !empty($_POST[$var]) ?
            $_POST[$var] :
            (!empty($_GET[$var])?$_GET[$var]:C('DEFAULT_ACTION'));
        unset($_POST[$var],$_GET[$var]);
        if($maps = C('URL_ACTION_MAP')) {
            if(isset($maps[strtolower(CONTROLLER_NAME)])) {
                $maps =   $maps[strtolower(CONTROLLER_NAME)];
                if(isset($maps[strtolower($action)])) {
                    // 记录当前别名
                    define('ACTION_ALIAS',strtolower($action));
                    // 获取实际的操作名
                    if(is_array($maps[ACTION_ALIAS])){
                        parse_str($maps[ACTION_ALIAS][1],$vars);
                        $_GET   =   array_merge($_GET,$vars);
                        return $maps[ACTION_ALIAS][0];
                    }else{
                        return $maps[ACTION_ALIAS];
                    }

                }elseif(array_search(strtolower($action),$maps)){
                    // 禁止访问原始操作
                    return   '';
                }
            }
        }
        return strip_tags( $urlCase? strtolower($action) : $action );
    }

ThinkPHP 是通过 getAction 方法来获取你 URL 里指定的方法名的。
打印 $var 得到

a
到这就知道问题出在哪里了,ThinkPHP 是通过给这个函数
传递 a 然后在$POST['a'] 或者 $_GET['a'] 里面
获得解析出来的你访问路径的操作名。又是一个懒人。你敲个 action 不行啊。
鉴于用的是人家的框架,我让路,参数名改为 groupA,妥妥的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值