Невозможно использовать метод flash в среде prod
-
20-09-2019 - |
Вопрос
Я использую методы 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 [информация] Флешка установлена
Мне кажется, я здесь упускаю что-то важное...