坚持
  • 微信

当前位置:首页 > 后端技术 > THINKPHP >

Thinkphp6隐藏应用名方法

作者:Azhe 时间:2021-11-15 阅读数: 2132人阅读

    Thinkphp6隐藏应用名方法,大部分人使用域名绑定应用、增加应用入口、入口文件绑定应用这些办法解决,本人研究了很久,找出了一个新的办法,分享给大家,不用域名绑定、创建新入口及配置apache或者nginx这些不友好的方式。多思考一些,可以找到更契合自己的办法,不同的人写出的代码是不一样的,希望更多人把代码写的更优雅。

   1.使用多应用模式,需要安装多应用模式扩展think-multi-app。

    composer require topthink/think-multi-app

    2.配置config文件下的app.php文件,在app.php中配置(这里默认应用设置为index)

   // 自动多应用模式
    'auto_multi_app'   => true,
    // 开启应用快速访问
    'app_express' => true,
    // 默认应用
    'default_app'      => 'index',

    3.这时,你可以将访问一个默认应用下的方法(页面),将默认应用index去掉,你可以发现,页面依然可以正常使用,灵感来源于此,重新写一个方法,可以起到url跳转的功能,跳转到默认应用下的页面时,将默认应用index隐藏掉。在app文件下common.php写入新的方法。

    /*
    *默认应用下url路径跳转
    *url string 跳转路径
    *$data array url参数
    *$route 是否有路由
    *return url地址 有路由返回封装路由链接,没有路由返回pathinfo链接
     */
    function to($url ='',$data = [],$route=false){
        if (false !== strpos($url, '://')) {
            return $url;
        }
        $controller = strtolower(\think\facade\Request::controller());
        $param = "";
        $param2 = "";
        if (0 === strpos($url, '/')) {
                // 直接作为路由地址解析
                $url = substr($url, 1);
        } elseif (false !== strpos($url, '\\')) {
            // 解析到类
            $url = ltrim(str_replace('\\', '/', $url), '/');
        } elseif ('' === $url) {
            $url = $controller . '/' . \think\facade\Request::action();
        } else {
            $path       = explode('/', $url);
            $action     = array_pop($path);
            $controller = empty($path) ? $controller : array_pop($path);
            $url = $controller . '/' . $action;
        }
        if(!empty($data)){
            foreach ($data as $key => $val) {
                $param.= "/" .$key ."/".$val;
                $param2.= "/".$val;
            }
        }
        $res = $route !==true ? "/".$url.$param.".".config("view.view_suffix"):"/".$url.$param2.".".config("view.view_suffix");
        return $res; 
    }

    4.也可以自己写个类似的,在页面中使用{:to("控制器/方法")},和url使用方法类似。这样可以生成隐藏应用名称,可以正常访问的URL地址。