Problemas com getFlash e setFlash no Yii
Pergunta
Ok, eu sei o que estou prestes a dizer é que vai ser super vago, mas ouça-me:
Eu quero usar o flash mensagens porque eu gosto da idéia deles, mas eles não parecem trabalhar sempre para mim.
Aqui é o meu fluxo de trabalho:
- O usuário cria um grupo na página Um
- Eu enviar um e-mail de notificação para membros do novo grupo
- Eu defina o flash mensagem de "Sucesso!"
- Eu redirecionar o usuário para o grupo recém-criado e apresentar o "Sucesso!" mensagem flash.
O problema é que depois que eu redirecionar o usuário, as mensagens flash não são mais que os $_SESSION.Para tornar isso ainda mais estranho, se eu tirar o passo onde eu enviar notificações de e-mail, ele NÃO funciona.WTF?
Tem mais alguém experimentou problemas semelhantes com as mensagens flash?Alguém tem algum insight sobre o porquê de enviar o e-mail iria afetar as mensagens flash?
Eu acho que neste momento eu só vou ficar com setState e removê-lo manualmente depois de exibi-los.
Solução
Como é o e-mail enviado?Eu sei que usando o Yii Mail extension (um swiftmailer wrapper eu acho) em "debug" modo usa o setFlash método, por isso, talvez, que a eliminação da matriz de alguma forma...?
O "flash" as variáveis são atualizadas pelo método init() do CWebUser, por isso, se há uma chamada extra para CWebUser é possível que é o que está a limpar a flash variáveis.
Considerando-se que você defina o flash DEPOIS de o e-mail, porém, eu não tenho certeza de como isso iria acontecer.A minha única outra acho que além do "modo de depuração" coisa (não é um problema se você está apenas usando o PHP mail métodos que) é de que o envio de correio está provocando um extra de redirecionamento em algum lugar.
Se você tem um depurador PHP como XDebug instalado gostaria de definir um ponto de interrupção no getFlash e setFlash código e obter um olhar para o que está acontecendo dessa forma.
Boa sorte!
Outras dicas
Agora você pode definir um componente AutoPoupDateFlash do Property do componente CWebUser como false. Nesse caso, a mensagem flash será removida somente após o uso.