服务端生成URL:
//$path 包含应用名在内的完整控制器方法路径 //$param 需要追加到URL里的参数 url($path,$param) //跨应用生成URL(portal 为应用名) $url = url('/portal/article/detail',[id=>1]) //应用内生成URL $url = url('/article/detail',[id=>1])
web前端生成URL
{{:url($path,$param)}} //跨应用生成URL(portal 为应用名) <a href="{{:url('/portal/article/detail',[id=>1])}}">XX文章标题</a> //应用内生成URL <a href="{{:url('/article/detail',[id=>1])}}">XX文章标题</a>
URL伪静态:
在当前应用目录下的创建route目录,再该目录下创建任意文件名的文件书写URL重写规则。如在 mall 应用下创建重写规则:
//文件路径 \app\mall\route\route.php <?php use think\facade\Route; //文章内容页路由 Route::rule('goods/<id>', 'Goods/detail')->pattern([ 'id' => '[\d]+' ]);
特殊URL生成:
个别情况下需要根据URL参数对应到其他特殊静态字符串(如:将 /portal/article/column?id=1 重写为 portal/article/dirname,其中 dirname 是 id为1栏目的特定名称),则需要在 route 文件里对 $backRouteForId 数组进行追加声明 ,如:
<?php use think\facade\Route; //文章列表页路由 $backRouteForId['article/column'] = []; foreach($cats as $id => $dirname){ //定义重写规则 Route::rule($dirname, 'article/column')->ext('html')->append(['id'=>$id]); //根据ID生成重命名过的静态URL,(用于通过 url 方法反向生成特殊URL) $backRouteForId['article/column'][$id] = '/portal/'.$dirname.'.html'; }
说明:
该 url 方法是重写了tp内置的url 助手函数,原系统内置的 url 助手函数不支持跨应用适用路由规则。重写后支持跨应用路由规则生成