Impossible d'utiliser la méthode flash dans un environnement de prod
-
20-09-2019 - |
Question
Je suis en utilisant les méthodes de setFlash et hasFlash de symfony 1.4 avec WAMP 2.0
Localement avec mon application frontend_dev, tout va bien de travail.
Mais dans un environnement de production, mon $this->forward404Unless($user->hasFlash('resultsArray'));
test échoue.
Je pensais que les méthodes flash où activées par défaut. Que puis-je faire pour que cela fonctionne s'il vous plaît?
Modifier. J'ai trouvé un message d'erreur intéressant
Voici mon fichier 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: ~
Dans le frontend_prod.log, je:
16 mars 05:57:42 symfony [info] {} sfPatternRouting route Match "page d'accueil" (/) pour / avec tableau de paramètres ( 'module' => 'principale', 'action' => 'index',)
16 mars 05:57:42 symfony [err] {} sfParseException fichier de configuration "D: \ wamp \ bin \ php \ symfony \ symfony14 \ lib / config / config / filters.yml" spécifie la catégorie "flash" avec une clé de classe manquante.
La solution
Avez-vous appelez executeShowResult action dans une redirection / contexte avant? Le flash a une durée de vie limitée et il disparaîtra après la requête suivante. Il est clair que le resultsArray a été débusqué.
Autres conseils
Vous avez un 404 étant généré dans la production (favicon ou image) et qui compte comme une demande à l'action 404 (après une redirection) effacer vos variables Flash.
Je ne sais pas si cela est la réponse, mais je n'ai pas une clé flash
dans mon dossier filters.yml, dans un Symfony 1.4.3 app, et je ne l'ai pas touché depuis saisissant la version du site Symfony . Avez-vous essayé de supprimer cette ligne du fichier YML, vider votre cache et d'essayer à nouveau?
Je me demande si le cache est activé pour prod?
Si vous le faites, et mettent en cache with_layout (ou si le flash est dans le modèle d'action, puis la mise en cache l'action correspondante), alors il sera retourné la page en cache sans le message flash sur les vues suivantes.
Assurez-vous que vous avez la use_flash=true
sur votre factories.yml
user:
class: myUser
param:
timeout: 3600
logging: %SF_LOGGING_ENABLED%
use_flash: true
default_culture: %SF_DEFAULT_CULTURE%
Une réponse assez vieux, mais je l'espère est d'une certaine utilité à quelqu'un d'autre avec le même problème.
@Lunohodov
(Désolé pour l'affichage d'une réponse au lieu d'un commentaire, mais je ne peux pas utiliser cette cause de façon de la limitation des caractères)
Voici l'action:
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;
}
Edit: Un autre journal intéressant. Dans mon action qui a mis le flash, j'ai mis un journal pour tester l'ensemble et les méthodes hasFlash ... et cela a fonctionné:
$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");
}
Les journaux pour que:
16 mars symfony 06:07:13 [info] Le flash est réglé
Je pense que je manque quelque chose de grand ici ...