![ThinkPHP实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/852/26943852/b_26943852.jpg)
4.8 重定向和页面跳转
4.8.1 重定向
在访问受保护的地址时,需要检测登录,如果用户未登录则直接跳转登录页面,此时需要用到重定向。ThinkPHP重定向的方法名为redirect,该方法为Cntroller的成员方法,需要在控制器中才能调用。
编辑Application/Home/Controller/IndexController.class.php,代码如下:
<? php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index() { $this->redirect('login'); } public function bind($id = 1) { echo U('Blog/view', array('id' => 1), 'shtml'); } public function login() { echo ’这是登录页’; } }
浏览器访问http://localhost/chapter-4/home/index/index,会发现浏览器自动跳转到http://localhost/chapter-4/home/index/login了。
redirect的第一个参数为URL地址表达式,第二个参数为URL变量,第三个参数为延迟时间,第四个参数为提示消息。
值得注意的是,ThinkPHP还内置一个redirect函数,该函数接收三个参数,第一个参数为URL地址,第二个参数为延迟时间,第三个参数为消息提示。与控制器redirect方法的区别是,redirect函数的第一个参数是一个独立的URL地址,系统不会对其做任何处理,而控制器的redirect方法第一个参数是URL地址表达式,ThinkPHP会根据URL_MODEL生成相应的URL。
4.8.2 页面跳转
在开发中,经常遇到一些带有信息提示的跳转页面,例如“充值成功,3秒后返回订单页”这种需求。ThinkPHP内置success和error方法来实现页面跳转。
编辑Application/Home/Controller/IndexController.class.php,代码如下:
<? php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index() { $data = array( 'status' => 1, 'data' => 'data' ); $this->ajaxReturn($data, 'xml'); } public function bind($id = 1) { echo U('Blog/view', array('id' => 1), 'shtml'); } public function buy() { $this->success(’购买成功,1秒后跳转首页’, U('index')); } }
浏览器访问http://localhost/chapter-4/Home/Index/buy,可以得到如图4-1所示结果。
![](https://epubservercos.yuewen.com/DB83A9/15367251204210306/epubprivate/OEBPS/Images/Figure-0059-0025.jpg?sign=1738873574-Sj0YovPs7HF0VXMXf11ktYckqfzF7oqs-0-7061e8d0e9cb54dc7244b565e2039cab)
图4-1
success和error方法的第一个参数表示提示信息,第二个参数表示跳转地址(建议用U方法生成),第三个参数是跳转时间(单位为秒),例如:
$this->success(‘操作成功,3秒后返回首页’, U(‘index'),3);
$this->error(‘您尚未登录,1秒后返回登录页’, U(‘User/login'),1);
如果跳转地址为空,success默认跳转$_SERVER["HTTP_REFERER"], error默认跳转javascript:history.back(-1);。
success的默认跳转延迟时间为1秒,error方法为3秒。
和redirect方法不同的是,success和error方法都可以使用模板,而redirect方法只能输出字符串,success和error默认的模板文件地址为THINK_PATH . 'Tpl/dispatch_jump.tpl', success方法可以配置“TMPL_ACTION_SUCCESS”改变模板地址,error方法可以配置“TMPL_ACTION_ERROR”改变模板地址。