我正在寻找一种在使用$f3->reroute();时传递数据/参数的优雅方法
我在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');
}
}
}是否有任何“优雅”的方法将数据(例如$msg)直接传递到$MapController->second();?
我不想为此使用$SESSION或全局$f->set('msg', $msg);。
发布于 2016-03-25 03:55:38
这不是一个特定于无脂肪框架的问题,而是一般的网络问题。当您重路由时,您告诉浏览器使用303头重定向代码重定向用户的浏览器页。花一分钟阅读关于重新路由的文档:http://fatfreeframework.com/routing-engine#rerouting
在你的问题中似乎有一些自相矛盾的信息,这使我怀疑你试图达到的目的。
如果要重新路由,可以使用会话、cookie或使用url的一部分传递消息或对消息的引用。
如果不需要重定向,而只想在不更改传递参数的情况下调用函数,则可以抽象函数的内容并从两个路由调用该函数。您还可以使用$f3全局函数,这是在不希望使用函数调用传递数据的情况下在函数之间传递数据的一种很好的方式。你为什么不想用这个?对于单个会话,数据是全局的,因此不需要考虑安全性问题,并且在请求结束时删除数据,因此服务器上很少有额外的占用空间或影响。
发布于 2017-11-20 12:42:53
如果您不介意在重路由中使用@map_name,您可以这样做:
$f3->reroute('path/?foo=bar');不是我承认的最漂亮的。我希望$f3->reroute('@path_name?foo=bar')能工作。
https://stackoverflow.com/questions/36161830
复制相似问题