重定向回 fat-free 框架中的上一条路线

redirect back to previous route in fat-free framework

有没有办法在 fat-free 框架中重定向回之前的路由?

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

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

选择哪种策略由您决定,但都可以使用 F3 轻松实现。

1) 推荐人 header

$f3->reroute($f3->get('SERVER.HTTP_REFERER'))

优点:易于实施。

缺点:如果未设置header,它将重定向到当前页面。如果 header 设置为不同的域,它将重定向到另一个网站。

为了避免重定向到另一个域,您需要检查引用域是否与网站域匹配:

$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) Session URL

// end of index.php
$f3->run();
$f3->set('SESSION.previousUrl',$f3->REALM);

// redirect code:
$f3->reroute($f3->get('SESSION.previousUrl'));

优点:没有重定向到不同域的风险

缺点:强制使用 sessions。如果您是 运行 一个 back-office 或一个已经使用 session 的应用程序,那很好,但是如果您是 运行 一个前端网站,它会阻止页面无法在客户端缓存。

3) 查询字符串

还有第三种选择,在某些特定情况下可能会起作用:在查询字符串中传递原始 URL。

<a href="/target?origin=/origin">Click here></a>
// redirect code:
$f3->reroute($f3->get('GET.origin'));