- ThinkPHP實戰
- 夏磊
- 701字
- 2020-11-28 18:26:54
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”改變模板地址。
- AngularJS Testing Cookbook
- Kubernetes實戰
- Building a Game with Unity and Blender
- Photoshop智能手機APP UI設計之道
- 無代碼編程:用云表搭建企業數字化管理平臺
- Magento 2 Development Cookbook
- Instant Typeahead.js
- Learn WebAssembly
- PHP編程基礎與實例教程
- 小型編譯器設計實踐
- C# Multithreaded and Parallel Programming
- Web前端測試與集成:Jasmine/Selenium/Protractor/Jenkins的最佳實踐
- Splunk Essentials
- Django 3 Web Development Cookbook
- 嵌入式網絡編程