think-multi-app icon indicating copy to clipboard operation
think-multi-app copied to clipboard

多应用模式下更换入口文件使用url问题

Open 0377 opened this issue 6 years ago • 2 comments

#9 也是这个问题 例如 访问admin模块 abc.php/index/login.html login方法里面输出:dump(url('index/login')->build()); 对应的结果是:abc.php/admin/index/login.html,这个网址是没法正常访问的 login方法里面输出:dump(url('/index/login')->build()); 或者dump(url('@index/login')->build());是正常的,但是这样感觉不符合使用习惯

parseUrl里面进行应用绑定判断,如果绑定过应用就不加前面的应用,代码修改如下,测试过是可以解决此问题,不知是否影响到其他功能,所以没有PR,只是把代码贴出来了

    protected function parseUrl(string $url, &$domain): string
    {
        $request = $this->app->request;

        if (0 === strpos($url, '/')) {
            // 直接作为路由地址解析
            $url = substr($url, 1);
        } elseif (false !== strpos($url, '\\')) {
            // 解析到类
            $url = ltrim(str_replace('\\', '/', $url), '/');
        } elseif (0 === strpos($url, '@')) {
            // 解析到控制器
            $url = substr($url, 1);
        } elseif ('' === $url) {
            //判断是否绑定
            if( $this->app->http->isBind() ) {
                $url = $request->controller().'/'.$request->action();
            }else{
                $url = $this->app->http->getName().'/'.$request->controller().'/'.$request->action();
            }
        } else {
            // 解析到 应用/控制器/操作
            $controller = $request->controller();
            $app        = $this->app->http->getName();

            $path       = explode('/', $url);
            $action     = array_pop($path);
            $controller = empty($path) ? $controller : array_pop($path);
            $app        = empty($path) ? $app : array_pop($path);

            $url = $controller . '/' . $action;

            $bind = $this->app->config->get('app.domain_bind', []);

            if ($key = array_search($app, $bind)) {
                $domain = is_bool($domain) ? $key : $domain;
            } else {
                //判断是否绑定
                if( !$this->app->http->isBind() ){

                    $map = $this->app->config->get('app.app_map', []);

                    if ($key = array_search($app, $map)) {
                        $url = $key . '/' . $url;
                    } else {
                        $url = $app . '/' . $url;
                    }
                }
            }
        }

0377 avatar Dec 06 '19 01:12 0377

https://www.kancloud.cn/thinkphp/thinkphp6-quickstart/1352494应该是BUG 手册在【多入口文件】章节写了

ken678 avatar Mar 27 '20 05:03 ken678

哎 木有人修复撒

ken678 avatar Apr 24 '20 08:04 ken678