我遇到了symfony会话值处理的问题。
基本上,问题是这样,我有一个激活的动作过滤器,它接受模块的值和执行的动作,并将它们存储在会话超全局中。
这是我的过滤器代码:
< ------ BEGIN CODE ---------------->
class getPrevModuleActionFilter extends sfFilter
{
public function execute ($filterChain)
{
//---------------Code to execute *BEFORE THE ACTION* execution---------------
if ($this->isFirstCall()) # Execute this filter only once
{
// Filters don't have direct access to request & user objects => Use context object to get them
$request = $this->getContext()->getRequest();
$user = $this->getContext()->getUser();
if($request->getParameter('action') !== "setCulture")
{
$_SESSION['prev_module'] = "M=".$request->getParameter('module');
$_SESSION['prev_action'] = "A=".$request->getParameter('action');
}
}
//---------------Execute next filter in the chain---------------
$filterChain->execute();
//---------------Code to execute *AFTER THE ACTION* execution, before the rendering---------------
//(...)
}
}
< ------ END CODE ---------------->
奇怪的是,如果我在最后一刻在前端Web控制器上执行print_r,我会看到:
当一个不是'setCulture'的动作一切顺利时(即会话获得之前的模块和行动)
当执行'setCulture'操作时:Symfony会在会话中存储以下值:
Array (
[prev_module] => M=
[prev_action] => A=
(etc)
)
即,它会丢失这两个条目的会话值。
我尝试使用不同的命名空间,我尝试使用sfUser中的symfony的setAttribute来处理会话值。最后,我尝试了PHP的原始会话处理。显然,与用户和会话值存储相关的工厂的关闭方法似乎搞乱了会话值!
我需要你的帮助。
SPECS:
答案 0 :(得分:0)
好吧,我猜Symfony在过滤器中使用时会混淆SESSION和COOKIES。
我最终创建了自己的过滤机制,为整个应用程序执行操作。
所以,澄清一下,我的选择是:
现在,fe_app_init()正确地处理了SESSION中的值。
令人遗憾的是,Symfony 1.4有一个像过滤器这样的工具,但随后会混淆SESSION和COOKIES处理。