重定向
如果控制器继承了 ginkgo\Ctrl
类,可以使用 redirect
方法进行重定向
namespace app\index\controller;
class Index {
public function hello() {
return $this->redirect('http://www.baigo.net');
}
}
重定向传参
如果是站内重定向,可以支持 URL 组装,有两种方式组装 URL,第一种是直接使用完整地址
$this->redirect('/index/index/hello/name/baigo');
这种方式会保持原来地址不做任何转换,第二种方式是使用 params
方法配合,例如:
$param = array(
'name' => 'baigo'
);
$this->redirect('/index/index/hello')->param($param);
最终重定向的地址和前面的一样的
记住请求地址
在很多时候,重定向需要记住当前请求地址,便于跳转回来。此时可以使用 remember
方法记住重定向之前的地址。
下面是一个示例,第一次访问 index
动作的时候会重定向到 hello
动作并记住当前地址,动作完成后到 restore
方法,restore
方法则自动重定向到之前记住的请求地址,完成一次重定向的回归,回到原点!
namespace app\ctrl\index;
use ginkgo\Session;
class Index {
public function index() {
// 判断session完成标记是否存在
if (Session::get('complete')) {
// 删除session
Session::set('complete', null);
return '重定向完成,回到原点!';
} else {
// 记住当前地址并重定向
$redirect = $this->redirect('index/index/hello');
$redirect->remember();
return $redirect;
}
}
public function hello() {
$name = Session::get('name');
return 'hello, ' . $name . '! <br><a href="/index/index/restore">点击回到来源地址</a>';
}
public function restore() {
// 设置session标记完成
Session::set('complete', true);
// 跳回之前的来源地址
$redirect = $this->redirect('index/index/hello');
$redirect->restore();
return $redirect;
}
}