🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## URL 生成 用于生成URL链接地址,系统提供的助手函数为`url`。 **函数说明** ``` /** * Url生成 * @param string $url 路由地址 * @param array $vars 数组变量 * @param bool|string $suffix 生成的URL后缀 ,例如html,默认是html * @param bool|string $domain 域名 * @return UrlBuild */ function url(string $url = '', array $vars = [], $suffix = true, $domain = false): UrlBuild ``` 模板使用方式 ``` {:url('/Index/demo')} ``` ## 入口文件说明 url 生成跟入口文件配置挂钩,这里为了兼容不支持伪静态的默认是显示入口文件的,如果你配置了伪静态是可以选择隐藏的,这样生成的url地址不会带入口文件。 ![](https://img.kancloud.cn/ee/29/ee29b530db8c768b4f7e9f1d62369812_652x395.png) ## 不使用路由方式生成 ### 1. 应用内访问 带有参数形式生成,参数1的格式为:`url('控制器/操作方法')` ~~~ // url生成,默认是带有html后缀的,url方法返回的是对象可方便额外的操作,使用(string)转字符串 $url = (string) url('/index/demo',['aaa'=>1]); dd($url); // 输出结果 ~~~ 前台入口文件隐藏后效果,如果未配置隐藏入口文件,则前面会有`/index.php/`,以下示例默认是配置了入口文件隐藏。 ~~~ /index/demo.html?aaa=1 ~~~ 生成带有域名的链接地址,第四个参数为`true`表示生成的链接地址加域名 ~~~ // 自动生成域名、加后缀 $url = (string)url('/demo/index',['aaa'=>1],'html',true); // 结果 http://xxx.cms.com/demo/index.html?aaa=1 ~~~ 生成锚点示例,生成锚点注意前面不需要加`/`,如下 ~~~ // 锚点跟子域名同时存在时需要锚点在前,域名在后 $url = (string)url('index/demo#ddd',['aaa'=>1,'b'=>'sfsfs'],'',true); // 结果 http://xxx.cms.com:8080/index/demo?aaa=1&b=sfsfs#ddd ~~~ ### 2. 访问其他应用,域名绑定 域名绑定配置在`config/app.php`中,目前有以下配置,这里配置好后记得在域名提供商做好解析。 ~~~ // 域名绑定 'domain_bind' => [ 'api' => 'api', '*' => 'index', ], ~~~ 示例:生成锚点并绑定到`api`域名,通过生成后的链接即可访问到`api`应用。提示:如果入口文件未配置隐藏,那么入口文件还是存在的。 ~~~ // 生成锚点,并绑定域名 $url = (string)url('index/demo#ddd@api',['aaa'=>1,'b'=>'sfsfs']); // 隐藏入口文件结果 http://api.cms.com/index/demo.html?aaa=1&b=sfsfs#ddd // 未隐藏结果 http://api.cms.com/index.php/index/demo.html?aaa=1&b=sfsfs#ddd ~~~ 示例2:也可使用url方法的参数4来实现,如下 ~~~ // 指定子域名为api $url = (string)url('/index/demo',['aaa'=>1],'html','api'); // 也支持完整域名,如果不是80端口需要域名+端口 $url = (string)url('/index/demo',['aaa'=>1],'html','local.cms.com:8080'); ~~~ ### 3. 访问其他应用,入口文件 如果不通过域名解析按入口文件来访问,需要生成其他应用链接时可以通过以下写法实现 ~~~ $url = (string)url('api:/index/demo',['aaa'=>1,'b'=>'sfsfs'],'',true); ~~~ 生成结果 ~~~ http://local.cms.com/api.php/index/demo?aaa=1&b=sfsfs ~~~ ## 使用路由方式生成 了解这里前先了解路由定义,假设`index`应用配置了以下路由 ~~~ Route::rule('/demo','/index/demo'); ~~~ 根据路由生成地址写法如下,参数1的地址需要跟上面的参数2保持一致。 ~~~ $url = (string)url('/index/demo',['aaa'=>1]); ~~~ 结果 ~~~ /demo.html?aaa=1 ~~~ 使用域名 ~~~ $url = (string)url('/index/demo',['aaa'=>1],'',true); ~~~