解决input()函数将uri做为参数的问题

浏览:135 发布日期:2019/01/09 分类:ThinkPHP5专区 关键字: input
在TP5 5.0.23版本上input助手函数会将uri做为参数获取,导致很多人在使用时产生疑惑,甚至将input()直接做为参数进行数据库操作时报错。我也遇到这个问题,最终通过修改助手函数来解决。

文件位置:thinkphp/helper.php
第113行起,修改input助手函数if (!function_exists('input')) {
    /**
     * 获取输入数据 支持默认值和过滤
     * @param string    $key 获取的变量名
     * @param mixed     $default 默认值
     * @param string    $filter 过滤方法
     * @return mixed
     */
    function input($key = '', $default = null, $filter = '')
    {
        if (0 === strpos($key, '?')) {
            $key = substr($key, 1);
            $has = true;
        }
        if ($pos = strpos($key, '.')) {
            // 指定参数来源
            list($method, $key) = explode('.', $key, 2);
            if (!in_array($method, ['get', 'post', 'put', 'patch', 'delete', 'route', 'param', 'request', 'session', 'cookie', 'server', 'env', 'path', 'file'])) {
                $key    = $method . '.' . $key;
                $method = 'param';
            }
        } else {
            // 默认为自动判断
            $method = 'param';
        }
        if (isset($has)) {
            $return = request()->has($key, $method, $default);
        } else {
            // return request()->$method($key, $default, $filter);
            // 判断uri是否在结果里,如果有,则剔除
            $return = request()->$method($key, $default, $filter);
        }
        // 获取Server请求参数
        $req = request()->server();
        if (is_array($return) && isset($req['REDIRECT_URL']) && array_key_exists($req['REDIRECT_URL'],$return)) {
            unset($return[$req['REDIRECT_URL']]);
        }
        return $return;
    }
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>