jae-jae / QueryList

:spider: The progressive PHP crawler framework! 优雅的渐进式PHP采集框架。
https://querylist.cc
2.66k stars 442 forks source link

为什么querylis4.0的版本会更改laravel5.1底层的data_get的方法,因为造成项目报错, #83

Closed fyk941127 closed 4 years ago

fyk941127 commented 5 years ago

laravel5.1 的原生 function data_get($target, $key, $default = null) { if (is_null($key)) { return $target; }

    $key = is_array($key) ? $key : explode('.', $key);

    foreach ($key as $segment) {
        if (is_array($target)) {
            if (! array_key_exists($segment, $target)) {
                return value($default);
            }

            $target = $target[$segment];
        } elseif ($target instanceof ArrayAccess) {
            if (! isset($target[$segment])) {
                return value($default);
            }

            $target = $target[$segment];
        } elseif (is_object($target)) {
            if (! isset($target->{$segment})) {
                return value($default);
            }

            $target = $target->{$segment};
        } else {
            return value($default);
        }
    }

    return $target;
}

安装querylis4.0的报错

image

因为更改了laravel5.1的原生后,多了个函数,所以无法使用 function data_get($target, $key, $default = null) { if (is_null($key)) { return $target; }

    $key = is_array($key) ? $key : explode('.', $key);

    while (($segment = array_shift($key)) !== null) {
        if ($segment === '*') {
            if ($target instanceof Collection) {
                $target = $target->all();
            } elseif (! is_array($target)) {
                return value($default);
            }

            $result = Arr::pluck($target, $key);

            return in_array('*', $key) ? Arr::collapse($result) : $result;
        }

        if (Arr::accessible($target) && Arr::exists($target, $segment)) {
            $target = $target[$segment];
        } elseif (is_object($target) && isset($target->{$segment})) {
            $target = $target->{$segment};
        } else {
            return value($default);
        }
    }

    return $target;
}

请作者在Arr::accessible 考虑下框架不兼容性,如果不使用app_path就不造成报错,如果做权限系统大多会是使用app_path