Не могу использовать метод flash в среде prod - PullRequest
2 голосов
/ 16 марта 2010

Я использую методы setFlash и hasFlash в Symfony 1.4 с WAMP 2.0

Локально с моим приложением frontend_dev все работает нормально. Но в производственной среде мой тест $this->forward404Unless($user->hasFlash('resultsArray')); не проходит.

Я думал, что методы флеш-памяти включены по умолчанию. Что я могу сделать, чтобы это работало, пожалуйста?

Редактировать: Я нашел интересное сообщение об ошибке.

Вот мой файл filters.yml

# You can find more information about this file on the symfony website:
# http://www.symfony-project.org/reference/1_4/en/12-Filters

rendering: ~
security:  ~

# insert your own filters here

cache:     ~
flash:     ~
execution: ~

В frontend_prod.log у меня есть:

16 марта 05:57:42 symfony [info] {sfPatternRouting} Сопоставить маршрут "домашняя страница" (/) для / с массивом параметров ('module' => 'main', 'action' => 'index',)
16 марта 05:57:42 symfony [err] {sfParseException} Файл конфигурации "D: \ wamp \ bin \ php \ symfony \ symfony14 \ lib / config / config / filters.yml" указывает категорию "flash" с отсутствующим ключом класса.

Ответы [ 6 ]

1 голос
/ 02 ноября 2010

У вас есть 404, генерируемый в производстве (favicon или image), который считается запросом к действию 404 (после перенаправления), очищающему ваши флэш-переменные.

1 голос
/ 16 марта 2010

Вы вызываете действие executeShowResult в контексте перенаправления / пересылки? Срок службы вспышки ограничен, и она исчезнет после следующего запроса. Ясно, что resultsArray сброшен.

0 голосов
/ 21 января 2011

Убедитесь, что у вас есть use_flash=true на вашем factories.yml

user:
  class: myUser
  param:
    timeout:         3600
    logging:         %SF_LOGGING_ENABLED%
    use_flash:       true
    default_culture: %SF_DEFAULT_CULTURE%    

Довольно старый ответ, но я надеюсь, что он пригодится кому-то еще с такой же проблемой.

0 голосов
/ 17 марта 2010

Интересно, у вас включено кеширование для prod?

Если вы это делаете и кэшируете with_layout (или если в шаблоне действия есть флэш-память, а затем кэшируете соответствующее действие), то при последующих просмотрах будет возвращена кэшированная страница без флеш-сообщения.

0 голосов
/ 16 марта 2010

@ Lunohodov

(извините за публикацию ответа вместо комментария, но я не могу использовать этот способ из-за ограничения символов)

Вот действие:

public function executeShowResult()
    {
        $user = $this->getUser();
        $this->forward404Unless($user->hasFlash('resultsArray'));

        $this->results = $user->getFlash('resultsArray');
        $user->setFlash('resultsArray', $this->results);

        $this->pager = new myArrayPager(null, 15);
        $this->pager->setResultArray($this->results);
        $this->pager->setPage($this->getRequestParameter('page'));
        $this->pager->init();

        $this->myModule = $this->getRequestParameter('myModule');
        $this->myTemplate = $this->getRequestParameter('myTemplate');

        $forwardPage = '../../'.$this->getRequestParameter('myModule').'/templates/'.$this->getRequestParameter('myTemplate');
        $this->setTemplate($forwardPage);

        return sfView::SUCCESS;

    }

Редактировать: еще один интересный журнал. В своем действии по установке флэш-памяти я поместил журнал для проверки методов set и hasFlash ... и это сработало:

$user = $this->getUser();
$user->setFlash('resultsArray', $this->results);
if ($user->hasFlash('resultsArray'))
{
    sfContext::getInstance()->getLogger()->info("The flash is set");
}
else
{
    sfContext::getInstance()->getLogger()->info("The flash is NOT set");
}

Журналы для этого:

16 марта 06:07:13 symfony [info] Вспышка установлена ​​

Я думаю, что мне здесь чего-то не хватает ...

0 голосов
/ 16 марта 2010

Не уверен, что это ответ, но у меня нет ключа flash в моем файле filters.yml в приложении Symfony 1.4.3, и я не трогал его с тех пор, как получил версию изСайт Symfony.Вы пытались удалить эту строку из файла yml, очистить кеш и повторить попытку?

...