Não é possível usar o método flash no ambiente de produção
-
20-09-2019 - |
Pergunta
Estou usando os métodos setFlash e hasFlash do symfony 1.4 com WAMP 2.0
Localmente com meu aplicativo frontend_dev, tudo funciona bem.Mas no ambiente de produção, meu teste $this->forward404Unless($user->hasFlash('resultsArray'));
falha.
Achei que os métodos flash estavam habilitados por padrão.O que posso fazer para que funcione, por favor?
Editar:Encontrei uma mensagem de erro interessante.
Aqui está meu arquivo 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: ~
No frontend_prod.log, tenho:
16 de março 05:57:42 symfony [info] {sfPatternRouting} Combine a rota "homepage" (/) para / com array de parâmetros ( 'module' => 'main', 'action' => 'index',)
16 de março 05:57:42 symfony [err] {sfParseException} Arquivo de configuração "D:\wamp\bin\php\symfony\symfony14\lib/config/config/filters.yml" especifica a categoria "flash" com chave de classe ausente.
Solução
Você chama o ExecutSeshawResult ação em um contexto de redirecionamento/avanço? O Flash tem uma vida útil limitada e desaparecerá após a próxima solicitação. Claramente o Resultado foi liberado.
Outras dicas
Você tem um 404 sendo gerado em produção (favicon ou imagem) e isso conta como uma solicitação para a ação 404 (após um redirecionamento) limpando suas variáveis flash.
Não tenho certeza se essa é a resposta, mas não tenho um flash
Chave no meu arquivo filters.yml, em um aplicativo Symfony 1.4.3, e eu não o toquei desde que peguei a versão no site Symfony. Você já tentou remover essa linha do arquivo YML, limpar seu cache e tentar novamente?
Gostaria de saber se você tem o armazenamento em cache habilitado para o Prod?
Se você o fizer e estiver em cache com_layout (ou se o flash estiver no modelo de ação, em cache a ação relevante), ele retornará a página em cache sem a mensagem flash nas visualizações subsequentes.
Certifique -se de ter o use_flash=true
Nas suas factories.yml
user:
class: myUser
param:
timeout: 3600
logging: %SF_LOGGING_ENABLED%
use_flash: true
default_culture: %SF_DEFAULT_CULTURE%
Uma resposta bastante antiga, mas espero que seja útil para qualquer outra pessoa com o mesmo problema.
@Lunohodov
(Desculpe por postar uma resposta em vez de um comentário, mas não posso usar dessa maneira causa da limitação dos personagens)
Aqui está a ação:
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: Outro log interessante. Na minha ação que defini o flash, coloquei um log para testar os métodos de conjunto e hasflash ... e funcionou:
$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");
}
Os logs para isso:
16 de março 06:07:13 Symfony [Info] O flash está definido
Acho que estou perdendo algo grande aqui ...