Hkcms URL 生成
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地址不会带入口文件。
不使用路由方式生成
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);