Php 如何使用f3 beforeroute()检查登录用户,重定向到登录,然后返回原始路由?

Php 如何使用f3 beforeroute()检查登录用户,重定向到登录,然后返回原始路由?,php,routing,fat-free-framework,Php,Routing,Fat Free Framework,我正在尝试在我的应用程序中使用无脂肪框架。如果此路径上的所有路由都需要身份验证,则beforeroute()似乎是检查活动会话的逻辑选择。在我劫持用户并强迫他们登录之前,我很难找到用户试图去的路线。 我觉得应该有一个f3变量,或者我可以在beforeroute()中调用的一些简单的变量,它会给我关于他们试图去哪里的信息,并且我应该能够使用f3来实现这一点,而不是在php应用程序中使用其他方法(会话变量,或者在域中以参数形式发送某些内容,等等) 我是否错过了beforeroute()的某些内容?在

我正在尝试在我的应用程序中使用无脂肪框架。如果此路径上的所有路由都需要身份验证,则beforeroute()似乎是检查活动会话的逻辑选择。在我劫持用户并强迫他们登录之前,我很难找到用户试图去的路线。 我觉得应该有一个f3变量,或者我可以在beforeroute()中调用的一些简单的变量,它会给我关于他们试图去哪里的信息,并且我应该能够使用f3来实现这一点,而不是在php应用程序中使用其他方法(会话变量,或者在域中以参数形式发送某些内容,等等)

我是否错过了beforeroute()的某些内容?在这种情况下不应该使用它吗?如果没有,最佳做法是什么

我尝试在会话变量$f3->set('session.previousUrl',$f3->REALM)中获取url,但由于我总是将它们重定向到登录,结果总是/login


当我这么做的时候,有人能解释一下f3中重新路由和重定向之间的区别吗?提前感谢。

只需将源URL传递到登录路径。例如:

function beforeRoute($f3,$params) {
  if (/*user not authenticated*/)
    $f3->reroute('/login?origin='.$f3->PATH);
    // or if you need to preserve query strings:
    $f3->reroute('/login?origin='.urlencode($f3->PATH.($f3->QUERY?'?'.$f3->QUERY:'')));
}
现在,在登录路径中,如果用户正确验证,请将其重新路由回源URL:

function post($f3,$params) {
  if (/*user gets authenticated*/) {
    $f3->reroute(isset($_GET['origin'])?$_GET['origin']:'/');
  }
}
至于方法,它是
路由
重路由
的混合

例如,
$f3->redirect('GET/oldpage','/newpage',TRUE)
是以下内容的简写:

$f3->route('GET /oldpage',function($f3){
  $f3->reroute('/newpage',TRUE);
});
在配置文件中使用它最有趣,例如:

[redirects]
GET /oldpage = /newpage

所以我们还是把它作为域中的参数发送,嗯?我一直希望f3能让它更优雅,但哦,好吧!谢谢你详尽的回答。:)好吧,F3什么也没做。这取决于你。您也可以将其存储在会话变量中,但对于这样一个简单的任务来说,这听起来有些过分。