在无脂肪框架中重定向回到以前的路由

时间:2018-04-02 09:00:14

标签: php fat-free-framework

有没有办法在无脂肪框架中重定向回到以前的路由?

类似于laravel中的redirect->back()

1 个答案:

答案 0 :(得分:5)

不,没有。如果查看Laravel源代码,back()函数会重定向到Referer HTTP标头中包含的URL或会话中存储的最后一个URL。

由您决定选择哪种策略,但两者都可以通过F3轻松实现。

1)Referer header

$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'));