一铡羡、頁面跳轉(zhuǎn)
如果要使用頁面跳轉(zhuǎn)必須要繼承基類Controller
類积蔚,因為基類Controller
引入了trait
類庫,trait
類庫又實現(xiàn)了success()
和error()
的跳轉(zhuǎn)方法烦周。
1尽爆、當(dāng)前控制器
來到默認(rèn)模塊默認(rèn)控制器中演示,首先繼承自基類Controller
读慎,在當(dāng)前Index
控制器中創(chuàng)建一個hello()
方法來模擬網(wǎng)站的后臺登陸和頁面的跳轉(zhuǎn):
class Index extends \think\Controller
{
public function index()
{
return 'TP5學(xué)習(xí)ing....';
}
public function hello($name)
{
if ($name=='thinkphp') {
$this->success('驗證成功漱贱,正在跳轉(zhuǎn)~~','ok');
}
else {
$this->error('驗證失敗,返回登陸頁面','login');
}
}
public function ok()
{
return '歡迎使用本系統(tǒng)';
}
public function login()
{
return '登陸頁面';
}
}
根據(jù)邏輯夭委,如果訪問的url
是:http://tp5.com/index/index/hello/name/thinkphp
幅狮,會執(zhí)行success()
方法,跳轉(zhuǎn)到ok()
方法株灸,反之崇摄,使用:http://tp5.com/index/index/hello/name/tp5
,則會走error()
方法慌烧,跳轉(zhuǎn)到login()
方法逐抑。
2、跨控制器
首先創(chuàng)建一個新的控制器Login
屹蚊,把Index
中的ok()
和login()
方法剪切到文件中:
<?php
namespace app\index\controller;
class Login extends \think\Controller
{
public function ok()
{
return '歡迎使用本系統(tǒng)';
}
public function login()
{
return '登陸頁面';
}
}
然后厕氨,Index
控制器也進行修改:
<?php
namespace app\index\controller;
class Index extends \think\Controller
{
public function index()
{
return 'TP5學(xué)習(xí)ing....';
}
public function hello($name)
{
if ($name=='thinkphp') {
$this->success('驗證成功进每,正在跳轉(zhuǎn)~~','login/ok');
}
else {
$this->error('驗證失敗,返回登陸頁面','login/login');
}
}
}
這樣就實現(xiàn)了跨控制器的跳轉(zhuǎn)腐巢,我們來驗證一下:http://tp5.com/index/index/hello/name/thinkphp
和http://tp5.com/index/index/hello/name/tp5
都能正常跳轉(zhuǎn)。
3玄括、跨模塊
首先創(chuàng)建一個demo
模塊冯丙,模塊下創(chuàng)建控制器Login.php
,把上個例子的Login.php
的內(nèi)容拷貝過去遭京,修改下命名空間胃惜,保存。
然后修改下Index
控制器:
public function hello($name)
{
if ($name=='thinkphp') {
$this->success('驗證成功哪雕,正在跳轉(zhuǎn)~~','demo/login/ok');
}
else {
$this->error('驗證失敗船殉,返回登陸頁面','demo/login/login');
}
}
這樣就實現(xiàn)了跨模塊的跳轉(zhuǎn),我們來驗證一下:http://tp5.com/index/index/hello/name/thinkphp
和http://tp5.com/index/index/hello/name/tp5
依舊都能正常跳轉(zhuǎn)斯嚎。
4利虫、外部地址
如果跳轉(zhuǎn)為外部地址的話,記得前提是必須要以協(xié)議開頭堡僻!
演示也很簡單糠惫,修改一下error()
方法跳轉(zhuǎn)的地址:
$this->error('驗證失敗,返回登陸頁面','http://www.baidu.com');
使用http://tp5.com/index/index/hello/name/tp5
測試一下钉疫,成功跳轉(zhuǎn)到百度硼讽。
補充說明
補充一下,這個跳轉(zhuǎn)地址牲阁,除了可以用字符串的形式外固阁,還可以路由的方式來生成。示例如下:
$this->success('驗證成功城菊,正在跳轉(zhuǎn)~~',\think\Url::build('demo/login/ok'));
如果覺得這樣寫比較繁瑣备燃,還可以通過注入函數(shù)進行簡化:
$this->success('驗證成功,正在跳轉(zhuǎn)~~',url('demo/login/ok'));
也沒有問題凌唬。
二赚爵、URL重定向
使用redirect(路由地址,請求變量,后綴,是否顯示域名)
方法
演示一下,因為演示是跳轉(zhuǎn)到同一控制器中的法瑟,只需要前兩個參數(shù):
class Index extends \think\Controller
{
public function hello($name)
{
if ($name=='thinkphp') {
$this->redirect('ok',['siteName'=>'百度']);
}
}
public function ok($siteName)
{
return '成功就會跳轉(zhuǎn)到 '.$siteName.' 網(wǎng)址冀膝。';
}
}
我們來驗證一下:http://tp5.com/index/index/hello/name/thinkphp
,可以正常跳轉(zhuǎn)霎挟。
同樣的窝剖,重定向也支持外部地址:
public function hello($name)
{
if ($name=='thinkphp') {
$this->redirect('ok',['siteName'=>'百度']);
}
else {
$this->redirect('http://www.baidu.com',302);//302是臨時重定向,301是永久重定向
}
}
驗證一下:http://tp5.com/index/index/hello/name/tp5
酥夭,直接重定向到百度了赐纱。