【问题标题】:redirect back to previous route in fat-free framework在无脂肪框架中重定向回先前的路线
【发布时间】:2018-04-02 09:00:13
【问题描述】:

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

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

【问题讨论】:

    标签: php fat-free-framework


    【解决方案1】:

    不,没有。如果您查看 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'));
    

    【讨论】:

      猜你喜欢
      • 2019-12-28
      • 2014-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 2015-02-02
      相关资源
      最近更新 更多