我创建了一个 sfFilter 来更新用户所在的当前模块:
class SessionFilter extends sfFilter {
public function execute($filterChain){
if ($this->isFirstCall()){
$user = $this->getContext()->getUser()->getId();
$module = $this->getContext()->getModuleName();
Doctrine::getTable('ActiveSession')->set($user, $module);
Doctrine::getTable('ActiveSession')->refresh();
}
$filterChain->execute();
}
}
当我查看数据库时,我发现记录已将字段“模块”设置为“默认”,但是当我看到日志时,它显示:
UPDATE active_session SET module = 'secretary' WHERE (sys_user_id = '2')
有谁知道如何解决此行为?
编辑:我忘记放置设置和刷新方法
class ActiveSessionTable extends Doctrine_Table
{
public function set($userId, $module){
$q = $this->createQuery()->update()
->set('module','?', $module)
->where("sys_user_id = ?", array($userId))->execute();
}
public function refresh(){
$time = time() - sfConfig::get('app_session_keep') * 60;
$this->createQuery()->delete()->where('time < ?', $time)->execute();
}
...
}
刷新方法应该在其他方法中使用,但为了测试我将其保留在那里。
好吧...关闭这个。
我可以实现我想要的唯一方法是检查模块是否为“默认”:
class ActiveSessionTable extends Doctrine_Table
{
public function set($userId, $module){
if($module != 'default'){
$q = $this->createQuery()->update()
->set('module','?', $module)
->where("sys_user_id = ?", array($userId))->execute();
}
}
...
}
确实不是一个令人满意的答案,但找不到正确的答案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)