Non può usare il metodo del flash in ambiente prod
-
20-09-2019 - |
Domanda
Sto usando il setFlash e hasFlash metodi di symfony 1.4 con WAMP 2.0
A livello locale con il mio frontend_dev app, tutto funziona bene.Ma in ambiente di produzione, il mio test $this->forward404Unless($user->hasFlash('resultsArray'));
non riesce.
Ho pensato che il flash metodi di cui abilitata per impostazione predefinita.Cosa posso fare per renderlo funziona per favore ?
Edit :Ho trovato un interessante messaggio di errore.
Qui è il mio filtri.file 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: ~
Nel frontend_prod.log, ho :
Mar 16 05:57:42 symfony [info] {sfPatternRouting} Match route "home page" (/) per / con parameters array ( 'module' => 'principale', 'action' => 'indice',)
Mar 16 05:57:42 symfony [err] {sfParseException} file di Configurazione "D:\wamp\bin\php\symfony\symfony14\lib/config/config/filters.yml" specifica categoria "flash" con la classe mancante di chiave.
Soluzione
Chiamare il executeShowResult azione in un redirect/avanti contesto?Il flash ha una durata limitata e scomparirà dopo la richiesta successiva.Chiaramente il resultsArray è stata lavata.
Altri suggerimenti
Si dispone di un errore 404 viene generato in produzione (favicon o immagine) e che conta come una richiesta di azione 404 (dopo un redirect) sgombrare il flash variabili.
Non sono sicuro se questa è la risposta, ma non ho un flash
chiave nella mia filtri.file yml, in Symfony 1.4.3 app, e non ho toccato dal afferrando la versione di Symfony, sito.Hai provato a togliere quella riga dal file yml, a svuotare la cache e riprovare?
Mi chiedo se avete la cache abilitata per prod?
Se lo si fa in cache with_layout (o se il flash è in azione il modello, quindi, la cache di azione in questione), quindi verrà restituita la pagina memorizzata nella cache senza il flash messaggio di visualizzazioni successive.
Assicurarsi di che avere il use_flash=true
sul tuo factories.yml
user:
class: myUser
param:
timeout: 3600
logging: %SF_LOGGING_ENABLED%
use_flash: true
default_culture: %SF_DEFAULT_CULTURE%
Una bella vecchia risposta, ma spero che sia di qualche utilità a qualcuno con lo stesso problema.
@Lunohodov
(Scusate per l'invio della risposta al posto di un commento, ma non posso usare questo metodo causa della limitazione di caratteri)
Ecco l'azione :
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'altra interessante di registro.Nella mia azione che impostare il flash, ho messo un log per verificare il set e hasFlash metodi...e ha funzionato :
$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");
}
I registri di :
Mar 16 06:07:13 symfony [info] Il flash è impostato
Penso che mi manca qualcosa di grande qui...