Значения потерянной сессии Symfony - PullRequest
2 голосов
/ 07 октября 2011

У меня проблема с обработкой значений сеанса Symfony.

По сути, проблема в том, что у меня активирован фильтр действий, который принимает значения модуля и выполненного действия и сохраняет их в суперглобальном сеансе.

Это код моего фильтра:

<------ НАЧАТЬ КОД ---------------->

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---------------
    //(...)

  }
}

<------ КОНЕЦ КОДА ---------------->

Странная вещь заключается в том, что если я выполню print_r на переднем веб-контроллере в самую последнюю минуту, я вижу, что:

  1. Когда действие, которое не является 'setCulture', все идет хорошо (т.е. сеанс получает предыдущий модуль и действие, как и должно)

  2. Когда выполняется действие 'setCulture': Symfony сохраняет следующие значения в сеансе:

    Array ( 
        [prev_module] => M= 
        [prev_action] => A=    
        (etc)
    )
    

    то есть он теряет значения сессии для этих 2 записей.

Я пытался использовать разные пространства имен, я пытался использовать setAttribute symfony из sfUser для обработки значений сеанса. В конце я попробовал сырую обработку сессий PHP. По-видимому, кажется, что методы закрытия фабрик, связанных с пользователем и хранением значений сеанса, портят значения сеанса!

Мне нужна ваша помощь, пожалуйста.

СПЕЦИФИКАЦИЯ:

  • версия Symfony: 1.4.6
  • PHP: 5,3
  • У меня отключен кэш Symfony
  • Я запускаю код с контроллером frontend_dev.php

1 Ответ

0 голосов
/ 11 октября 2011

Ну, я думаю, Symfony испортил SESSION и COOKIES при использовании в фильтрах.

В итоге я создал свой собственный механизм фильтрации, который выполняет действия для всего приложения.

Итак, чтобы уточнитья выбрал:

  1. создать класс, автоматически загруженный в корневую папку lib, со статическим методом с именем 'fe_app_init'
  2. добавить метод preExecute к действиям каждого модуля в FEприложение, которое использует fe_app_init из этого класса

Теперь fe_app_init () обрабатывает значения в SESSION с полным правом.

Жаль, что в Symfony 1.4 есть такой инструмент, как фильтры, но потом он портитсяСЕССИЯ И ПЕЧЕНЬЕ обработка в тех.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...