U方法的使用-ThinkPHP3.2

为了能够动态的根据当前的URL设置生成对应的URL地址,ThinkPHP内置提供了U方法,用于URL的动态生成。

U方法的定义规则如下(方括号内参数根据实际应用觉得):

U(‘地址表达式‘,[‘参数‘],[‘伪静态后缀‘],[‘显示域名‘])

 

地址表达式
地址表达式的格式定义如下:

1. [模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...

如果不定义模块的话 就表示当前模块名称,下面是一些简单的例子:

1 U(‘User/add‘); //生成User控制器的add操作的URL地址
2 U(‘Blog/read?id=1‘); //生成Blog控制器的read操作,并且id为1的URL地址
3 U(‘Admin/User/select‘);  //生成Admin模块的User控制器的select操作的URL地址

参数

U方法的第二个参数支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,例如:

1 U(‘Blog/cate‘, array(‘cate_id‘=>1,‘status‘=>1));
2 U(‘Blog/cate‘,‘cate_id=1&status=1‘);
3 U(‘Blog/cate?cate_id=1&status=1‘);

三种方式是等效的,都是生成Blog控制器的cate操作 并且cate_id 为1 status 为1的URL地址。
但是不允许使用下面的定义方式来传参数

1 U(‘Blog/cate/cate_id/1/status/1‘);

伪静态后缀
U函数会自动识别当前配置的伪静态后缀,如果你需要指定后缀生成URL地址的话,可以显式传入,例如:

1 U(‘Blog/cate‘,‘cate_id=1&status=1‘,‘xml‘);

自动识别
根据项目的不同URL设置,同样的U方法调用可以智能地对应产生不同的URL地址效果,例如针对:

1 U(‘Blog/read?id=1‘);

这个定义为例。
如果当前URL设置为普通模式的话,最后生成的URL地址是:

1.  http://serverName/index.php?m=Blog&a=read&id=1

如果当前URL设置为PATHINFO模式的话,同样的方法最后生成的URL地址是:

1.  http://serverName/index.php/Home/Blog/read/id/1

如果当前URL设置为REWRITE模式的话,同样的方法最后生成的URL地址是:

1.  http://serverName/Home/Blog/read/id/1

如果当前URL设置为REWRITE模式,并且设置了伪静态后缀为.html的话,同样的方法最后生成的URL地址是:

1.  http://serverName/Home/Blog/read/id/1.html

如果开启了URL_CASE_INSENSITIVE ,则会统一生成小写的URL地址。
生成路由地址
U方法还可以支持路由,如果我们定义了一个路由规则为:

1 ‘news/:id\d‘=>‘News/read‘

那么可以使用

U(‘/news/1‘);

最终生成的URL地址是:

1. http://serverName/index.php/Home/news/1

注意:如果你是在模板文件中直接使用U方法的话,需要采用 {:U(‘参数1‘, ‘参数2‘…)} 的方式,具体参考模板的使用函数内容。

域名支持
如果你的应用涉及到多个子域名的操作地址,那么也可以在U方法里面指定需要生成地址的域名,例如:

1  U(‘Blog/[email protected]‘,‘id=1‘);

@后面传入需要指定的域名即可

系统会自动判断当前是否SSL协议,生成https:// 。
此外,U方法的第4个参数如果设置为true,表示自动识别当前的域名,并且会自动根据子域名部署设置APP_SUB_DOMAIN_DEPLOY 和APP_SUB_DOMAIN_RULES 自动匹配生成当前地址的子域名。
锚点支持
U函数可以直接生成URL地址中的锚点,例如:

1 U(‘Blog/read#comment?id=1‘);

生成的URL地址可能是:

 1. http://serverName/index.php/Home/Blog/read/id/1#comment
时间: 2024-07-28 16:23:52

U方法的使用-ThinkPHP3.2的相关文章

thinkphp3.2 cli模式的正确使用方法

最近要使用thinkphp3.2版本的cli模式,手动执的话没有问题,比如php /www/index.php home/article/get 这样没有问题,但是一般用cli模式都是定时任务比较多,这个时候写到定时任务的时候,比如 0 * * * * * php /www/index.php home/article/get 这样就会出现引入ThinkPHP.php失败的问题,这个问题算是比较容易解决的,但是后来还有其他各种报错,经过查看相关核心代码,终于找到无需修改代码,就可以轻易使用cli

ThinkPHP3.2判断手机端访问并设置默认访问模块的方法

ThinkPHP3.2判断是否为手机端访问并跳转到另一个模块的方法 目录结构 公共模块Common,Home模块,Mobile模块 配置Application/Common/Conf/config.php文件 'MODULE_ALLOW_LIST' => 'Home,Mobile' 接下来配置Application/Common/Common/function.php文件 添加isMobile方法 [详见代码] function isMobile(){ // 如果有HTTP_X_WAP_PROF

Thinkphp3.2多站点共用S方法缓存

建立在同个服务器的多个相同站点,如果需要用到S缓存,并且几个站点需要共用一个缓存文件,只需要将Runtime下面的temp文件夹(应用缓存)共用即可 设置如下:(我这里是Thinkphp3.2) 1.例如,将A站设为主站点,我在A站的index.php做了以下配置 define('RUNTIME_PATH','D:/Runtime/');//将本站的缓存目录全部保存在D盘 2.这个时候,我在B站点需要共用A站点的S方法缓存,需要在B站点配置temp的路径,这时候我们要修改的是RUNTIME_PA

thinkphp3.2.3 数据库写入add 方法的一些问题。

最近在做项目中遇到的一个数据操作add()方法,在不开启debug的模式下会漏掉一些字段没写入数据库. 当时并不知道是这个原因,明明在开发的时候都是没问题的,怎么突然出现这个问题,找了好久都没有头绪,实在没办法只好百度了. 后来在thinkphp的官方论坛上找到了一个解决的方法,说是因为缓存的问题,这时忽然想起了在上线的时候把debug模式关了,果断的去把debug模式打开试了一下 还真是这么回事.但是thinkphp官方并没有给什么解释.解决方法其实也很简单就是将对应应用下runtime目录下

Thinkphp3.2.3 执行query命令 包括在模板中使用<php> </php>时 query的使用方法

$sql="select * from `rjshop_productbase` where `id`=1"; $Model =M();$query=$Model->query($sql);//$query=mysql_query($sql);   在Thinkphp中不能出现这种使用方法 // print_r($query); echo $query[0]['title'];

thinkphp3.2跨控制器调用其他模块的方法

thinphp中前台后台都有互相调用方法,这样可以省去重复内容. 1 2 $hello = new \Admin\Common\Fun\hello(); $hello->hehe(); 调用其他地方的方法同理. 如果是在同控制器里模块名可以省略. 如调用common里面的某个类的方法: 1 2 $hello = new \Common\Fun\hello(); $hello->hehe(); 框架里面提供了跨模块夸.控制器的 A() 方法 1 2 3 4 5 6 7 class GoodsCo

数据分页 THINKPHP3.2 分页 三种分页方法

数据分页 复制本页链接 opensns 通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方法 $User = M('User'); // 实例化User对象 $count = $User->where('status=1')->count();// 查询满足要求的总记录数 $Page = new \Think\Page($count,25);// 实例化分页类 传入总记录数和每页显示的

thinkphp3.2中开启静态缓存后对404页面的处理方法

静态缓存很实用但是有时有些不需要静态缓存,如404页面,第一次访问返回404页面并缓存,第二次换回的状态就是200,属于正常访问,虽然人眼可以看出是404页面,但是搜索引擎不会的,而是把这个页面当成正常页面收录,那么问题就大了,404页面有一千个或更多,搜索引擎会认为你作弊制造大量垃圾内容,而且网站对安全也不利,等等. 解决方法:在404状态码之前将缓存动态关闭 C('HTML_CACHE_ON',false); 1 2 3 4 5 6 7 // 404 public function _404

ThinkPHP3.2 G函数代码及 使用方法

代码: // 内存是否可调用 define('MEMORY_LIMIT_ON',function_exists('memory_get_usage')); /** * 记录和统计时间(微秒)和内存使用情况 * 使用方法: * <code> * G('begin'); // 记录开始标记位 * // ... 区间运行代码 * G('end'); // 记录结束标签位 * echo G('begin','end',6); // 统计区间运行时间 精确到小数后6位 * echo G('begin',