TP中U方法详解
U方法常用于ThinkPHP里的页面跳转
官方称为url组装,
就是根据某种规则组成一个url地址,这个功能就叫组装。
在ThinkPHP里,系统提供了一个封装的函数来处理url的组装,俗称U方法。
U方法是系统提供的快速方法,除此外还有A,B,C,D,E,F,G,IM,R,S,U等快速方法。这些方法都定义在系统的函数库文件(ThinkPHP/Common/functions.php)里
/** * URL组装 支持不同URL模式 * @param string $url URL表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...' * @param string|array $vars 传入的参数,支持数组和字符串 * @param string|boolean $suffix 伪静态后缀,默认为true表示获取配置值 * @param boolean $domain 是否显示域名 * @return string */ function U($url='',$vars='',$suffix=true,$domain=false) {...}
分析源码后即可得知:U方法有三种形式
①U('方法名')→用于跳转同级控制器下的指定页面。举个例子:发件后跳到发件箱
②U('控制器名/方法名')→用于跳转到同级目录下的指定控制器下的指定页面。例如:错误页面的空白操作,会在url错误时跳到Empty控制器下的error页面
③U('分组名/控制器名/方法名')→用于跳转到同级应用下的指定分组里指定控制器下的指定页面。一般用的不多
U方法语法:①U('url路径',参数数组可选);②指定控制器下的指定方法,例U('Index/index')
例如:使用U方法组装出当前控制器下index方法的地址,U('index')
Test控制器:
<?php namespace Admin\controller; use Think\Controller; class TestController extends Controller{ public function test(){ echo U('index');//输出/index.php/Admin/Test/index.html } } ?> <meta charset="utf-8">
加上数组参数,例echo U('index/index',array('name' => 'tony','age' => '23'));
<?php namespace Admin\controller; use Think\Controller; class TestController extends Controller{ public function test(){ echo U('index/index',array('name' => 'tony','age' => '23'));//输出/index.php/Admin/index/index/name/tony/age/23.html } } ?>
总结:
通用语法格式:U('分组名/控制器名/方法名',array('参数名1'=>参数值1,'参数名2'=>参数值2....))
2. Tp系统中的跳转
在ThinkPHP中有两种跳转方法:成功跳转、失败跳转,在控制器中执行跳转
成功跳转:$this->success(跳转提示信息,跳转地址--可选,等待时间--可选);
没有指定跳转地址,则跳转到上一页
<?php namespace Admin\controller; use Think\Controller; class TestController extends Controller{ public function test1(){ echo U('index/index',array('name' => 'tony','age' => '23')); } public function test2(){ //成功跳转,地址为test1,即当前控制器下的test1方法 $this->success('操作成功',U('test1'),5); }
失败跳转:$this->error();
语法与成功跳转相同,对上述进行修改
public function test2(){ //失败跳转,地址为test1,即当前控制器下的test1方法 $this->error('操作失败',U('test1'),5); }
总结:控制器的跳转成功和失败方法,继承自Think的controller.class.php控制器
/** * 操作错误跳转的快捷方法 * @access protected * @param string $message 错误信息 * @param string $jumpUrl 页面跳转地址 * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间 * @return void */ protected function error($message='',$jumpUrl='',$ajax=false) { $this->dispatchJump($message,0,$jumpUrl,$ajax); } /** * 操作成功跳转的快捷方法 * @access protected * @param string $message 提示信息 * @param string $jumpUrl 页面跳转地址 * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间 * @return void */ protected function success($message='',$jumpUrl='',$ajax=false) { $this->dispatchJump($message,1,$jumpUrl,$ajax); }
【总结】
U方法用于完成对URL地址的组装,特点在于可以自动根据当前的URL模式和设置生成对应的URL地址,格式为:
U('地址','参数','伪静态','是否跳转','显示域名');
1 //比如操作成功跳转到Store模块下的Ump控制器中的lists方法 2 $this->success('新增成功',U('Strore/Ump/lists'));
1 //跳转时带着参数的话 2 $this->success('新增成功',U('Store/Ump/lists','type=1&id=1'));
当在模板中使用U方法时,好处在于:一旦你的环境变化或者参数设置改变,你不需要更改模板中的任何代码。
在模板中的调用格式需要采用 {:U('地址', '参数'…)} 的方式
<!--在模板中使用U方法 --> {:U('Store/Ump/lists','type=1&id=1')}
{:U('Article/index','category='.$vo['name'])}
.
.