摘要:在ThinkPHP学习过程中使用系统Controller类库提供的success()/error()跳转方法,官方《ThinkPHP3.2.3快速入门 》文档、《ThinkPHP3.2.3完全开发手册 》文档,都没有讲清楚跳转其它控制器/操作的原理,这里将从TP的源码讲解跳转过程,明确问题所在,以及怎样修正。
一 . 需要提前了解的东西
<a>标签的href属性
href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。如果用户选择了 <a> 标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。
举例解释:
a标签href属性实例 | 说明 |
---|---|
href=’http://www.baidu.com’ | 点击后直接跳转至百度首页 |
href=’test.html’ | 跳转至文档当前目录下test.html文件 |
href=’javascript:history.back(-1);’ | 运行JS代码,返回上页 |
href=’<?php echo($_SERVER[“HTTP_REFERER”]); ?>’ | 返回操作前页面 |
下面要讲到的TP的Controller类库的success/error方法其实是在模板中使用了第二种方法来跳转的。
二 . success/error方法问题所在、及修正
先说问题出在哪里,当我在Index控制器里面希望跳转至Login控制器里面,按照官方文档的说法是这样做:
$this->error(‘马上跳转!’,’Login/index’,1);
可事实并不是这样
URL会从
http://localhost/ThinkPHP_Test/index.php/Home/Index/index
跳转至
http://localhost/ThinkPHP_Test/index.php/Home/Index/Login/index
这显然不是我想要的,现将问题追踪的思路列举如下,并提出修正方法。
上我自己的测试代码。
//IndexController.class.php
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
$this->display();
}
public function click(){
$this->error('马上跳转!','../Login/index',1);
//$this->redirect('Login/index');
}
}
?>
//这是模板文件Index/index.html
<!DOCTYPE html>
<html