我正在寻找一种在使用$f3->reroute();
时移交数据/参数的优雅方式
我在routes.ini
:中配置了多个路由
GET @sso: /sso/first [sync] = ControllerCcpSso->first, 0
GET @map: /map [sync] = ControllerMapController->second, 3600
现在我从reroute();
到@map
路线,从first();
class Sso {
public function first($f3){
$msg = 'My message!';
if( !empty($msg) ){
$f3->reroute('@map');
}
}
}
是否有任何"优雅"的方式将数据(例如$msg
)直接传递到$MapController->second();
?
我不想为此使用$SESSION
或全局$f->set('msg', $msg);
。
这不是一个特定于无脂肪框架的问题,而是一般的web问题。当您重新路由时,您会告诉浏览器使用303标头重定向代码重定向用户的浏览器页面。花一分钟时间阅读有关重新路由的文档:http://fatfreeframework.com/routing-engine#rerouting
你的问题中似乎有一些自相矛盾的信息,这让我对你试图实现的目标产生了疑问。
如果您正在重新路由,您可以使用会话、cookie,也可以使用url的一部分来传递消息或引用消息。
如果您不需要重定向,只想在不更改传递参数的情况下调用函数,则可以抽象函数的内容,并从两个路由调用该函数。您还可以使用$f3全局变量,这是在不想使用函数调用传递数据的情况下在函数之间传递数据的一种很好的方式。你为什么不想用这个?对于单个会话,数据是全局的,因此不存在安全问题,并且数据在请求结束时被擦除,因此对服务器的额外占用或影响非常小。
如果你可以在重新路由中不使用@map_name,你可以这样做:
$f3->reroute('path/?foo=bar');
我承认不是最漂亮的。我希望$f3->reroute('@path_name?foo=bar')
能起作用。