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.

Foi útil?

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 ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top