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);



本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com