Я создал 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();
}
}
Когда я посмотрел в БД, я обнаружил, что запись установила поле 'module' в'default', но когда я вижу журнал, он говорит:
UPDATE active_session SET module = 'secretary' WHERE (sys_user_id = '2')
Кто-нибудь знает, как исправить это поведение?
РЕДАКТИРОВАТЬ: я забыл поставить
метода set и refresh
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();
}
...
}
Метод обновления следует использовать в другом методе, но для тестирования я оставляю его там.