重定向

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

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

重定向传参

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