获取上一界面url并实现夸模块跳转

ThinkPHP获取上一页面的url

最近项目有一个需求,需要从一个页面跳转到编辑界面,然后保存后返回原来的界面。由于正常的保存成功只能返回到编辑对应的模块总览界面,所以,要实现跳转回上一界面就必须获取到上一界面的url。

使用ThinkPHP内置对象

受到ThinkPHP内置方法success默认跳转的启发,这里我选择用 $_SERVER['HTTP_REFERER'] 来获取上一界面的url。

1
$pre_url = $_SERVER['HTTP_REFERER'];

获取上一界面url

编辑的大概步骤是:点击编辑按钮,跳转到编辑界面,点击保存,触发 update 函数,跳转回上一界面。

C层 edit

1
2
3
4
5
6
7
8
9
10
// 从v层传来数据
$param = Request::instance();
// 获取上一界面url
$pre_url = $_SERVER['HTTP_REFERER'];
...
// 将文章信息返回到v层
$this->assign('contractor', Contractor);
$this->assign('pre_url', $pre_url);
// 返回编辑界面
return $this->fetch();

url的传递

由于update前还有一步edit,所以需要把上一界面的url传到v层,再从v层传递回来,由update方法接收一下。

C层 update

1
2
3
4
5
6
7
8
9
10
11
12
13
// 从v层传来数据
$param = Request::instance();
...
// 接收v层传来的url
$pre_url = $param->post('pre_url');
...
// 编辑成功跳转回上一界面
if ($Contractor->save()) {
return $this->succsee('编辑成功!', $pre_url);
// 编辑失败
} else {
return $this->error('编辑失败!');
}

注意:保存成功跳转时,不能使用 url() 助手函数来辅助生成url,因为我们这里获取到的 $pre_url 就是完整的url。

小结

C层 Request::instance()后,然后打印出它获取到的信息,会发现我们使用的对象就在里面。善于使用断点,会让你的编程省很多时间。


官方参考资料:https://www.kancloud.cn/manual/thinkphp5/118051

坚持原创技术分享,您的支持将鼓励我继续创作!