Вопрос

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

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

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

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

Вот мой файл filter.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" с отсутствующим ключом класса.

Это было полезно?

Решение

Вы звоните в выполнитьShowResult действие в контексте перенаправления/пересылки?Флэш имеет ограниченный срок службы и исчезнет после следующего же запроса.Очевидно, результатыМассив был смыт.

Другие советы

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

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

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

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

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

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

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

@Луноходов

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

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

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;

    }

Редактировать :Еще один интересный лог.В своем действии, которое установило flash, я добавил журнал для проверки методов 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 [информация] Флешка установлена

Мне кажется, я здесь упускаю что-то важное...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top