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,妥妥的。

转载于:https://www.cnblogs.com/peterzha/p/6853248.html

你可能感兴趣的:(ThinkPHP 解析访问路径的坑)