重定向

如果控制器继承了 ginkgo\Ctrl 类,可以使用 redirect 方法进行重定向

  1. namespace app\index\controller;
  2. class Index {
  3. public function hello() {
  4. return $this->redirect('http://www.baigo.net');
  5. }
  6. }

重定向传参

如果是站内重定向,可以支持 URL 组装,有两种方式组装 URL,第一种是直接使用完整地址

  1. $this->redirect('/index/index/hello/name/baigo');

这种方式会保持原来地址不做任何转换,第二种方式是使用 params 方法配合,例如:

  1. $param = array(
  2. 'name' => 'baigo'
  3. );
  4. $this->redirect('/index/index/hello')->param($param);

最终重定向的地址和前面的一样的


记住请求地址

在很多时候,重定向需要记住当前请求地址,便于跳转回来。此时可以使用 remember 方法记住重定向之前的地址。

下面是一个示例,第一次访问 index 动作的时候会重定向到 hello 动作并记住当前地址,动作完成后到 restore 方法,restore 方法则自动重定向到之前记住的请求地址,完成一次重定向的回归,回到原点!

  1. namespace app\ctrl\index;
  2. use ginkgo\Session;
  3. class Index {
  4. public function index() {
  5. // 判断session完成标记是否存在
  6. if (Session::get('complete')) {
  7. // 删除session
  8. Session::set('complete', null);
  9. return '重定向完成,回到原点!';
  10. } else {
  11. // 记住当前地址并重定向
  12. $redirect = $this->redirect('index/index/hello');
  13. $redirect->remember();
  14. return $redirect;
  15. }
  16. }
  17. public function hello() {
  18. $name = Session::get('name');
  19. return 'hello, ' . $name . '! <br><a href="/index/index/restore">点击回到来源地址</a>';
  20. }
  21. public function restore() {
  22. // 设置session标记完成
  23. Session::set('complete', true);
  24. // 跳回之前的来源地址
  25. $redirect = $this->redirect('index/index/hello');
  26. $redirect->restore();
  27. return $redirect;
  28. }
  29. }