多应用模式下更换入口文件使用url问题
0377 opened this issue · comments
Ice commented
#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;
}
}
}
}
御宅男(YznCMS官方) commented
御宅男(YznCMS官方) commented
哎 木有人修复撒