ThinkPHP实战
上QQ阅读APP看书,第一时间看更新

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所示结果。

图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”改变模板地址。