这一节来记录一下thinkPHP框架中,方法如何跳转的问题。比如我现在有一个login方法,传进来username和password两个参数,如果验证成功,就跳转到首页,否则跳转到失败页面。我们用ThinkPHP的方法跳转来描述该步骤的实现。


在UserController.php中编写userLogin方法:

  public function userLogin(){
        $username = @$_GET["username"];
        $password = @$_GET["password"];
        echo $username,$password;
    }

访问

http://www.php1234.com:8082/index.php/admin/user/userLogin?username=root&password=root

可以看到页面打印出两个root,接下来,我们再编写一个简单的逻辑,当用户名和密码都是root,表示验证成功,就跳转到登录成功的页面。这个页面我们用一个简单的方法来实现:

    public function index(){
        echo "<h1>欢迎来到后台管理系统</h1>";
    }

接下来,编写逻辑。父类Controller给我们提供了一个success方法,需要传入两个参数,分别为提示信息和跳转路径。我们就用和这个办法来跳转。

    public function userLogin(){
        $username = @$_GET["username"];
        $password = @$_GET["password"];
        if($username == "root" && $password == "root"){
            $this->success("登录成功,页面即将跳转...","index");
        }
    }

再次访问

http://www.php1234.com:8082/index.php/admin/user/userLogin?username=root&password=root

image.png

可以看到页面立刻出现一个笑脸,然后经过1秒钟的事件,跳转到了index方法。


那么我能不能设置等待的时间呢?当然阔以啦,给它添加第三个参数,就是等待的秒数。


相信你也已经猜到了,有success方法,自然也有error方法,就是登录失败的时候,就给一个失败的跳转。让我们继续完善代码。

    public function index(){
        echo "<h1>欢迎来到后台管理系统</h1>";
    }
    
    public function fail(){
        echo "<h1>不要意思,登录失败了哟~</h1>";
    }
    
    public function userLogin(){
        $username = @$_GET["username"];
        $password = @$_GET["password"];
        if($username == "root" && $password == "root"){
            $this->success("登录成功,页面即将跳转...","index",5);
        }else{
            $this->error("登录失败,用户名或者密码错误,页面即将跳转...","fail",5);
        }
    }


让我们故意写错密码,再访问一次,就看到了这个页面。

http://www.php1234.com:8082/index.php/admin/user/userLogin?username=root&password=root2

image.png

有人说,那我不想要这种ThinPHP默认的跳转样式,可以吗?


当然可以啦,你可以使用redirect方法。


只不过,这个方法的参数位置不太一样,还可以带一些参数跳转过去。

    public function userLogin(){
        $username = @$_GET["username"];
        $password = @$_GET["password"];
        if($username == "root" && $password == "root"){
            $this->redirect("index",array(),5,"登录成功,页面即将跳转...");
        }else{
            $this->redirect("fail",array(),5,"登录失败,用户名或者密码错误,页面即将跳转...");
        }
    }

第二个参数,就是要带过去的数据,一般用array来装。

这里带过去的数据,可以在跳转过去的那个方法里面接收。

    public function userLogin(){
        $username = @$_GET["username"];
        $password = @$_GET["password"];
        if($username == "root" && $password == "root"){
            $this->redirect("index",array("gift" => "10000元"),5,"登录成功,页面即将跳转...");
        }else{
            $this->redirect("fail",array(),5,"登录失败,用户名或者密码错误,页面即将跳转...");
        }
    }


跳转过去后,可以在地址栏看到附带的参数,好像发一份邮件,里面的附件。

http://www.php1234.com:8082/index.php/Admin/User/index/gift/10000元.html

后面的.html是系统自己加的,不用管。


接着,在index方法中去获取这个参数。

    public function index(){
        echo "<h1>欢迎来到后台管理系统</h1>";
        echo "谢谢,我收到了你的礼物:". $_GET["gift"];
    }

最终效果:

欢迎来到后台管理系统

谢谢,我收到了你的礼物:10000元



最后,讲一个在方法中返回HTML页面的办法,很简单,比如User控制器里面有一个index方法,我就在View文件夹中创建一个User目录,里面写一个index.html。两者对应上即可,在方法中写上一句:

    public function index(){
        $this->display();
    }

那么,访问该方法时,就会自动去View文件夹中找User文件夹,再去搜索是不是有一个页面叫做index.html,如果有,就返回!

image.png

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	这是Admin模块下的User控制器里面的index方法...所对应的页面
</body>
</html>

访问一下 http://www.php1234.com:8082/index.php/admin/user/userLogin?username=root&password=root

看看效果吧。


成功后,记得点个赞哦。