【发布时间】:2018-04-02 09:00:13
【问题描述】:
有没有办法在无脂肪框架中重定向回以前的路线?
类似于 laravel 中的redirect->back()。
【问题讨论】:
有没有办法在无脂肪框架中重定向回以前的路线?
类似于 laravel 中的redirect->back()。
【问题讨论】:
不,没有。如果您查看 Laravel 源代码,back() 函数将重定向到包含在 Referer HTTP 标头中的 URL,或者重定向到存储在 session 中的最后一个 URL。
由您决定选择哪种策略,但两者都可以通过 F3 轻松实现。
1) 引用标头
$f3->reroute($f3->get('SERVER.HTTP_REFERER'))
优点:易于实施。
缺点:如果没有设置标题,它将重定向到当前页面。如果标头设置为不同的域,它将重定向到另一个网站。
为了避免重定向到另一个域,您需要检查referer域是否与网站域匹配:
$referer=$f3->get('SERVER.HTTP_REFERER');
if (preg_match('/^https?:\/\/'.preg_quote($f3->HOST,'/').'\//',$referer)) {
// The referer URL belongs to the website domain
$f3->reroute($referer);
} else {
// The referer URL belongs to another domain (or is empty)
// take some action, for example reroute to current page:
$f3->reroute();
// or reroute to homepage
$f3->reroute('/');
}
2) 会话网址
// end of index.php
$f3->run();
$f3->set('SESSION.previousUrl',$f3->REALM);
// redirect code:
$f3->reroute($f3->get('SESSION.previousUrl'));
优点:没有重定向到不同域的风险
缺点:强制使用会话。如果您正在运行后台或已经使用会话的应用程序,那很好,但如果您正在运行前端网站,它将阻止页面在客户端缓存。
3) 查询字符串
还有第三种选择,它可以在某些特定情况下工作:在查询字符串中传递原始 URL。
<a href="/target?origin=/origin">Click here></a>
// redirect code:
$f3->reroute($f3->get('GET.origin'));
【讨论】: