在 reroute() 上交出 "data/params";在 "fat free framework"

Hand over "data/params" on reroute(); in "fat free framework"

我正在寻找一种优雅的方式来在使用 $f3->reroute();

时移交 data/params

我在 routes.ini:

中配置了多个路由
GET @sso: /sso/first [sync]  =   Controller\Ccp\Sso->first, 0
GET @map: /map       [sync]  =   Controller\MapController->second, 3600

现在我reroute();@map路线,从first();

class Sso {
    public function first($f3){
        $msg = 'My message!';

        if( !empty($msg) ){
            $f3->reroute('@map');
        }
    } 
}

是否有任何 "elegant" 方法将数据(例如 $msg)直接传递到 $MapController->second();

我不想为此使用 $SESSION 或全局 $f->set('msg', $msg);

这不是 fat-free-framework 特有的问题,而是一般网络问题。重新路由时,您告诉浏览器使用 303 header 重定向代码重定向用户的浏览器页面。 花一点时间阅读有关 re-routing 的文档:http://fatfreeframework.com/routing-engine#rerouting

你的问题中似乎有一些自相矛盾的信息,这让我怀疑你试图达到的目的。

如果要重新路由,您可以使用 session、cookie,或使用 url 的一部分来传递消息或对消息的引用。

如果你不需要重定向,只是想调用函数而不改变传递的参数,你可以抽象函数的内容并从两个路由调用该函数。您还可以使用 $f3 全局变量,这是在您不想使用函数调用传递数据的情况下在函数之间传递数据的好方法。您有什么理由不想使用它吗?单个 session 的数据是全局的,因此没有安全问题,并且数据在请求结束时被擦除,因此对服务器的额外占用空间或影响非常小。

如果您不介意在重新路由中不使用@map_name,您可以这样做:

$f3->reroute('path/?foo=bar');

我承认这不是最漂亮的。我希望 $f3->reroute('@path_name?foo=bar') 会起作用。